php file_exists restituisce false, anche se il file esiste sul mio linux

Questa domanda è stato chiesto molte volte, ma nessuna delle risposte che ho trovato mi ha aiutato.

Sto cercando di ottenere php file_exists() per lavoro. L’unico scenario, quando funziona è quando il php file si trova nella stessa directory del file da utilizzare file_exist() e solo con il nome del file (cioè escludendo il percorso). Ma non è conseguente comportamento, si prega di vedere di seguito.

Som informazioni:

  • safe_mode=off
  • senza collegamenti simbolici directory 28
  • senza spazi nel nome del file
  • Di tutte le directory in /var/www/html/smic/upload/28/ha di apache:apache 777 come permessi.
  • Con php 5.3

PHP:

echo getcwd()
clearstatcache();
$file = 'file:///var/www/html/smic/upload/28/ul.txt';
//Also tried like this
//$file = '/var/www/html/smic/upload/28/ul.txt';

if(file_exists($file)){
    echo $file." exists";
}

getcwd() stampa /var/www/html/smic/modules/core/biglietto

Il permesso di php-script e il file da controllare è apache:apache 777.

Alcuni dettagli circa la struttura di directory:

[[email protected] 28]# pwd
/var/www/html/smic/upload/28

[[email protected] 28]# ls -l ul.txt
-rw-r--r--. 1 apache apache 2 Feb  9 10:50 ul.txt

[[email protected] 28]# chmod 777 ul.txt

[[email protected] 28]# ls -l ul.txt
-rwxrwxrwx. 1 apache apache 2 Feb  9 10:50 ul.txt

Il comportamento non cambia dopo aver cambiato i permessi del file. La directory /28 ha drwxr-xr-x. per l’utente di apache e apache group

Per prova, ho anche spostato il php-script /28, ha dato apache:apache 777 diritti. Cambiato il $file “ul.txt” (cioè $file = ‘ul.txt’;). Che funziona, l’ul.txt il file non viene trovato.

getcwd() stampa /var/www/html/smic/upload/28

Come un’altra prova ho cercato di trovare un altro file, escludendo il percorso nel “ticket” directory, il file non è stato riconosciuto.

Sto sbattendo la testa…

Ogni consiglio è apprezzato.

Che versione di php usi? Hai provato senza il file:// schema?
PHP 5.3, aggiunto al mio post. Ho quasi solo provato senza file://

OriginaleL’autore Nicsoft | 2012-02-09

8 Replies
  1. 7

    I permessi del file da sola non è sufficiente per php per valutare file_exists. il processo che viene eseguito anche il php deve chiedere il permesso per attraversare tutte le directory principali del file.

    Controllare uno per uno e verificare che il php in grado di leggere e inserire (r-x)

    ls -ald /var
    ls -ald /var/www
    ls -ald /var/www/html
    ls -ald /var/www/html/smic
    ls -ald /var/www/html/smic/upload
    ls -ald /var/www/html/smic/upload/28
    Ho fatto in modo che l’autorizzazione è apache:apache 777 per tutte le sottodirectory upp e compreso a /28

    OriginaleL’autore

  2. 2

    Stringendo cannucce qui…

    Provare su – apache (o qualsiasi altro utente del webserver funziona.. apache2, www-data, ecc..) e poi l’attraversamento della directory.

    Ci sono tutti .file htaccess bussare, o di qualsiasi altra limitazione di configurazione di apache?

    L’utente di apache non è disponibile… Verificato che non ci sono .file htaccess comunque.
    Inoltre, ho fatto in modo che l’autorizzazione è apache:apache 777 per tutte le sottodirectory upp e compreso a /28.

    OriginaleL’autore

  3. 2

    Gee, questa è stata una bella tufo. Ho sempre assicurarsi che quando ho copiare qualsiasi cosa dal web prima di incollarlo in un normale editor di testi al fine di rimuovere tutte strane/personaggi nascosti, quindi copiare qualsiasi cosa di nuovo e incollarlo nel mio dev tool.

    Come ho già detto da qualche parte in un commento, ho fatto pwd e copiato il testo del mio server virtuale per il mio osx. Ma quello che non mi pensa/che sapevo era che strano/personaggi nascosti potrebbe seguire se l’ho fatto dal mio server linux, quindi non ho assicurarsi di copiare tutto via texteditor.

    Mi sono ricordato che ho avuto un problema un bel po ‘ di tempo fa, quando ho copiato dal web e pensato che questo potrebbe essere un simile tipo di problema. Ho aperto il mio script in un hex editor. E cosa ho trovato… ‘/var’ guardato lite: /var’. Rimuovere i caratteri strani risolto il problema.

    Grazie a tutti per i vostri commenti di cui sopra. Auguro che può aiutare qualcun altro e forse mi ha aiutato, senza nemmeno saperlo (dal momento che ho fatto un sacco di cose basato su i tuoi commenti).

    OriginaleL’autore

  4. 1

    quanto riguarda i diritti di accesso alla cartella?
    il percorso $file = 'file:///var/www/html/smic/upload/28/ul.txt'; non è corretto.
    Provare lo script php copia nella cartella upload e file='28/ul.txt';.
    La cartella deve essere leggibile.

    Ho aggiornato il mio post con queste informazioni. Tutte le directory in /var/www/html/smic/upload/28/ ha di apache:apache 777 come permessi. Ho cambiato proprio ora. Nessuna differenza nel comportamento.
    Io non sono su di un sistema Linux con PHP in questo momento. Io il check-in la sera. Quindi non sono sicuro se questo è corretto. provare “./smic/upload/28/ul.txt” o “smic/upload/28/ul.txt” se lo script php è nella cartella html.
    Grazie, utilizzando un editor esadecimale ho trovato strani personaggi che danneggiato il file.
    in modo che il file è danneggiato? un altro file che si può controllare/open?
    Ho corretto il file (php-script), rimuovendo i caratteri strani in un hex editor. Poi ha funzionato. Vedi la mia risposta qui da qualche parte.

    OriginaleL’autore

  5. 1

    Provare ad aprire il file con $file = “/upload/28/ul.txt’;

    Non funziona (l’ho scritto, ma devo aver fatto un errore perché non funziona, probabilmente ho testato errato script, cancellato il commento).
    utilizzare DIR costante per ottenere la directory corrente, dopo l’uso, il percorso relativo alla risorsa
    Grazie, utilizzando un editor esadecimale ho trovato strani personaggi che danneggiato il file.

    OriginaleL’autore

  6. 0

    Dal php.net manuale, “in caso di errore, un E_WARNING viene emesso.” assicurarsi di segnalazione di errore è impostato a un livello che mostra avvisi e provare.

    Inoltre, “Questa funzione restituisce FALSE per file inaccessibile a causa della modalità provvisoria restrizioni. Tuttavia, questi file possono essere inclusi se si trovano in safe_mode_include_dir.”. Non siete in esecuzione in modalità sicura php hai? phpinfo() dovrebbe dirti.

    Secondo il mio post io non sto usando la modalità sicura.

    OriginaleL’autore

  7. 0

    Dove è il file php che si trova? Se all’interno della cartella “html”), quindi utilizzare un percorso relativo, come $file = "smic/upload/28/ul.txt";

    Ho inserito questa riga: getcwd() stampa /var/www/html/smic/modules/core/biglietti
    In tal caso, provare $file = "../../../upload/28/ul.txt";
    In realtà è già risolto, vedi la mia risposta. Il file era corrotto e ho dovuto risolvere il problema utilizzando un editor esadecimale per rimuovere caratteri strani. Grazie comunque!

    OriginaleL’autore

  8. 0

    Forse, un nome per il file c’è uno spazio simbolo. È importante.

    Hai trovato risposta?

    OriginaleL’autore

Lascia un commento