2011-12-08 23 views
5

Cuando intento incluir una ruta de archivo larga, el PHP incluido no se carga. Un camino corto de inclusión funciona bien.PHP Include: Long Path Issue

Por ejemplo, la siguiente fallará:

../../contents/2010-St-Louis-Rams-Tickets-Season-Package-Includes-Tickets-For-All-Regular-Season-Home-Games/inc/title.inc 

¿Alguien tiene alguna idea de dónde está el problema podría ser?

+1

¿La ruta es incorrecta? – alex

+0

Por favor, publique la configuración de su sistema operativo y el mensaje de error exacto de PHP. Podría ser un verdadero error de archivo no encontrado o quizás solo un problema de permisos. No es probable que su sistema operativo esté limitando la longitud del nombre de archivo. –

+0

El código es correcto porque el mismo código está funcionando en el servidor Linux con appachi, pero hemos migrado el sitio del servidor Linux al servidor Windows 2008 con IIS 7. No muestra ningún error o advertencia simplemente se lo saltó. – Imran2220

Respuesta

1

Compruebe si su ruta (incluido el nombre de la unidad, etc.) supera los 260 caracteres. Porque esa es la longitud máxima del directorio para Windows. Click here to see the reference.

La referencia también establece que existe la posibilidad de crear nombres de ruta extralargas anteponiendo el nombre de ruta con "\? \". Eso debería expandir la longitud máxima de ruta a 32767 caracteres. Pero no tengo idea si esto se puede usar dentro de PHP.

+2

Veo un +1 en esta respuesta, entonces me preguntaba si alguien tuvo éxito al usar la sintaxis \\? \ Dentro de php? Personalmente, no pude hacer que funcionara, pero ¿quizás me estoy perdiendo algo? –

+0

Sí, anteponer '\\? \' No funciona. [Este] (http://www.serverphorums.com/read.php?7,627200) parece una explicación, aunque larga. – XedinUnknown

+0

Tiene razón. Debido a un error en PHP, los nombres de rutas largas no funcionarían. Esto ha sido [arreglado con PHP 7.1] (https://github.com/php/php-src/blob/php-7.1.0RC4/NEWS#L763). – Carsten

0

tuve el mismo problema con un proyecto symfony 1.x al escribir pruebas que parecían algo como esto:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once __DIR__ . '/../../../../../../../MY/LONG/PATH.php' 

La cosa aquí es que los /../../ .. requieren de mucho del espacio del personaje En mi caso, si no se usaran, funcionaría.

En Symfony se puede obtener la raíz de proyectar llamando sfConfig :: get ('SF_ROOT_DIR'), y por lo tanto de que pudiera cambiar el código de la siguiente manera:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once sfConfig::get('sf_root_dir') . '/MY/LONG/PATH.php' 

Esto funciona (en mi caso) perfectamente.

Aunque aquí utilizo el directorio raíz provisto por el framework symfony, en su propio proyecto solo es cuestión de definir el directorio raíz del proyecto en alguna parte y mantenerlo accesible.