2010-08-25 19 views
8

Tengo un archivo que me gustaría otra secuencia de comandos para acceder utilizando file_get_contentsfile_get_contents no es encontrar un archivo que existe

El archivo me gustaría que el acceso está en el directorio por encima de ella, así que estoy usando file_get_contents('../file.php?this=that')

Sin embargo, está volviendo No such file or directory y no puedo entender por qué. El archivo está ahí.

Supongo que tiene algo que ver con que es un archivo local en lugar de un control remoto. ¿Alguna idea o solución?

Respuesta

20
file_get_contents('../file.php?this=that') 

Esto no va a funcionar, a menos que tenga una URL completa con toda la sintaxis http://..... PHP verá esto como una solicitud para obtener un archivo llamado file.php?this=that un nivel por encima del directorio actual. No lo tratará como una URL relativa y hará una solicitud HTTP; en su lugar, usará el controlador del sistema de archivos local. Es muy posible que tengas file.php allí arriba, pero como el sistema de archivos local no tiene ningún concepto de URL o parámetros de consulta, no sabrá quitarle el ?this=that y simplemente cargar file.php. De ahí su 'error de archivo no'.

+0

Bueno, ¿hay una manera de evitarlo sin incluir el archivo, entonces? – Rob

+2

Claro, solo use una URL absoluta. 'file_get_contents ('http://example.com/some/dirs/file.php?this=that');' que pasará por el manejador HTTP y probablemente funcione como lo desee. Pero parece tonto hacer un viaje de ida y vuelta completo a través de HTTPland solo para obtener algo de otro archivo PHP. Es como hervir spaghetti un fideo a la vez y calentar agua fresca para cada fideo. –

+0

Bueno, ver eso tampoco es una gran opción. Necesito hacerlo un poco más portable, y así la URL de file.php cambiará, pero continuará siendo un directorio sobre el archivo que accede a él. Espera, déjame ir a ver algunas teclas '$ _SERVER' y ver si puedo resolver algo. PD Me gusta tu símil – Rob

3

No hay ningún archivo en esa ubicación.
Tienes que usar la ruta correcta.

En primer lugar hacer una echo getcwd(); para ver qué directorio actual es ahora (de la cual su ruta relativa se construye)
Entonces doble ubicación de control archivo.php en relación a este directorio.
Comprobar el nombre del archivo, podría ser sensible.

¿Puedo preguntar un motivo por el que abre un archivo php con esta función?

Bueno, una respuesta:

$your_var = 1; 
include('../file.php'); 
+0

El archivo se encuentra en esa ubicación, y he podido acceder a él cuando uso una URL absoluta. Utilizo esta función para abrirla y poder enviar los parámetros 'GET' y recibir mensajes que saldrán con respecto a errores o éxito. – Rob

+0

Sí, lo hago, teniendo en cuenta que funciona cuando lo uso con una URL completa – Rob

+0

@Rob esa es la estúpida actitud del equipo de PHP que te engañó. Y la falta de conocimiento, por supuesto. Una sola función file_get_contents se usa para solicitar dos dominios completamente diferentes. Un sistema de archivos y un servicio HTTP. Un desarrollador de PHP debe distinguirlos bien –

1

es getcwd() == dirname(__FILE__)?

Una vez, he encontrado un problema donde el uso de una ruta relativa siempre arrojaba un error en un host compartido. Terminamos usando rutas absolutas usando dirname(__FILE__) como ruta base (estableciendo una constante en el arranque y usando esa constante como valor de ruta base) y todo funcionó bien. No profundizamos en el problema, pero tal vez te encuentres con lo mismo. Solo estoy adivinando aquí.

5

que siguió adelante y se utiliza algunas variables $ _SERVER, la combinación de ellos en conjunto para obtener el URL completo y lo utilizó en file_get_contents:

file_get_contents('http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']) . '/../file.php?this=that');

Que hizo el truco. Gracias por ayudar a todos.

+0

¿Dos votos a favor y no hay razones o comentarios? Pido soluciones temporales y nadie me proporciona ninguna. Encuentro uno y la gente se molesta y, por lo tanto, menospreciada? Lol – Rob

+13

Creo que la gente rechazó esto porque Marc B te dijo lo que estaba mal y te llevó la mayor parte del camino, entonces solo tenías que encontrar las variables '$ _SERVER' correctas, lo cual es trivial ... pero luego creaste tu propia respuesta y lo acepté en lugar de mencionar tus variables '$ _SERVER' en un comentario y Aceptar _su respuesta. No fue necesario. – JMTyler

2

uso como esto ....

$string1=file_get_contents("c:/rose1/ram.txt"); echo $string1; 

o $lines = file_get_contents('http://www.example.com/');

13

De acuerdo con PHP.neta la solución correcta para la lectura de archivos utilizando la función file_get_contents desde el servidor local utiliza

// <= PHP 5 
$file = file_get_contents('./people.txt', true); 

// > PHP 5 
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH); 

pensaba que podría ayudar en lugar de utilizar soluciones!

Cuestiones relacionadas