2010-08-25 16 views
8

Ho un file che mi piacerebbe un altro script per accedere utilizzando file_get_contentsfile_get_contents non è trovare un file che esiste

Il file mi piacerebbe che l'accesso si trova nella directory di sopra di esso, quindi sono utilizzando file_get_contents('../file.php?this=that')

Tuttavia, sta restituendo No such file or directory e non riesco a capire perché. Il file è lì.

Suppongo che abbia qualcosa a che fare con il fatto di essere un file locale piuttosto che un telecomando. Qualche idea o soluzione alternativa?

risposta

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

Questo non funzionerà mai, a meno che non si costruisce un URL completo con l'intera sintassi http://..... PHP vedrà questo come una richiesta per ottenere un file chiamato file.php?this=that un livello sopra la directory corrente. Non lo tratterà come un URL relativo e farà una richiesta HTTP, ma userà invece il gestore del filesystem locale. Si può benissimo avere file.php lassù, ma poiché il file system locale non ha alcun concetto di URL o parametri di query, non sarà in grado di rimuovere lo ?this=that e caricare solo file.php. Quindi il tuo 'no errore di questo tipo'.

+0

Beh, c'è un modo per aggirare il problema senza includere il file, quindi? – Rob

+2

Certo, basta usare un url assoluto. 'file_get_contents ('http://example.com/some/dirs/file.php?this=that');' che passerà attraverso il gestore HTTP e molto probabilmente funzionerà come vuoi tu. Ma sembra sciocco fare un giro completo attraverso HTTPland solo per ottenere qualcosa da un altro file PHP. Piuttosto come bollire gli spaghetti uno spaghetto alla volta e scaldare acqua fresca per ogni noodle. –

+0

Beh, vedi che non è nemmeno un'opzione. Ho bisogno di renderlo un po 'più portatile, e quindi l'URL di file.php cambierà, ma continuerà ad essere una directory sopra il file che vi accede. Aspetta, lasciami andare a vedere alcune chiavi '$ _SERVER' e vedere se riesco a capire qualcosa. Post scriptum Mi piace la tua similitudine – Rob

3

Non c'è alcun file in quella posizione.
Devi usare il percorso corretto.

Prima di tutto fare un echo getcwd(); per vedere che cosa directory è ora corrente (da cui il percorso relativo è costruito)
Poi doppia posizione di controllo file.php in relazione a questa directory.
Controlla il nome del file, potrebbe essere sensibile.

Posso chiedere un motivo per cui apri un file php con questa funzione?

Beh, una risposta:

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

Il file si trova in quella posizione e sono riuscito ad accedervi quando si utilizza un URL assoluto. Io uso questa funzione per aprirla in modo che possa inviare i parametri 'GET' ad essa e ricevere messaggi che emetterà in merito a errori o successo. – Rob

+0

Sì, lo so, considerando che funziona quando lo uso con un URL completo – Rob

+0

@Rob che è stupido atteggiamento del team PHP che ti ha ingannato. E mancanza di conoscenza, ovviamente. Una singola funzione file_get_contents viene utilizzata per richiedere due regni completamente diversi. Un filesystem e un servizio HTTP. Uno sviluppatore PHP dovrebbe distinguerli bene –

1

è getcwd() == dirname(__FILE__)?

Una volta, ho riscontrato un problema in cui l'utilizzo di un percorso relativo generava sempre un errore su qualche host condiviso. Abbiamo finito per utilizzare i percorsi assoluti utilizzando dirname(__FILE__) come percorso di base (impostando una costante nel bootstrap e usando quella costante come valore del percorso di base) e tutto ha funzionato bene. Non abbiamo approfondito ulteriormente il problema, ma forse stai incontrando la stessa cosa. Sto solo indovinando qui.

5

sono andato avanti e usato alcune variabili _SERVER $, combinandoli insieme per ottenere l'URL completo e usato in file_get_contents:

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

Che ha fatto il trucco. Grazie per l'aiuto a tutti.

+0

Due downvotes e nessun motivo o commento? Chiedo soluzioni alternative e nessuno me ne fornisce. Ne trovo uno e la gente si arrabbia e quindi degusta? Lol – Rob

+13

Penso che la gente abbia sottovalutato questo perché Marc B ti ha detto cosa era sbagliato e ti ha preso la maggior parte del modo, quindi hai dovuto trovare solo le variabili '$ _SERVER', che è banale ... ma poi hai creato la tua risposta _own_ e Lo accetta piuttosto che menzionare le variabili '$ _SERVER' in un commento e Accettare questa sua risposta. Non era necessario farlo. – JMTyler

2

uso come questo ....

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

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

13

Secondo PHP.net la soluzione corretta per la lettura dei file utilizzando la funzione file_get_contents dal server locale utilizza

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

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

pensato che potrebbe aiutare invece di utilizzare soluzioni alternative!

Problemi correlati