Utilizzando DIRECTORY_SEPARATOR in file_exists() su Windows

var_dump(DIRECTORY_SEPARATOR) //string '\' (length=1)
var_dump(file_exists("C:/1212.txt")); //true
var_dump(file_exists("C:\1212.txt")); //false
var_dump(file_exists("C:".DIRECTORY_SEPARATOR."1212.txt")); //false

Cosa DIRECTORY_SEPARATOR fare? Perché è il caso di cui sopra, false quando si utilizza DIRECTORY_SEPARATOR?

Provare "C:\\1212.txt".

OriginaleL’autore meotimdihia | 2010-08-24

7 Replies
  1. 3

    provare:

    var_dump(file_exists("C:\\1212.txt"));

    La barra rovesciata è il carattere di escape per aggiungere una stringa è necessario seguire con un altro.

    sì, posso copiare la stringa di tést ma dimenticate barra
    Che permetterà al vostro script per funzionare su Windows. Se vuoi che il tuo script per essere portatile, check-out RobertPitts risposta e ricordatevi di usare maiuscole e minuscole percorsi di file.
    Più unix distribuzioni sono case-sensitive, dove come NTFS base dati è facoltativo, il mio consiglio sarebbe quello di tenere TUTTO in minuscolo, per supportare entrambi i sistemi.

    OriginaleL’autore

  2. 11

    Cosa DIRECTORY_SEPARATOR fare?

    DIRECTORY_SEPARATOR uguale a "/" (Unix) o "\" (Windows) a seconda della piattaforma.

    Perché caso sopra è falso con DIRECTORY_SEPARATOR?

    Perché le stringhe tra virgolette "\123" si traduce in "Q" (maggiori dettagli in Manuale di PHP).

    Quando la costruzione Windows percorsi, si dovrebbe sfuggire alla barra rovesciata: "C:\\1212.txt" o utilizzare le stringhe tra apici: 'C:\1212.txt'.

    Anche meglio e in modo più pulito sarebbe usare Unix separatore di directory "/" hard-coded direttamente nella stringa del percorso (senza alcun costanti), funziona bene sotto Windows: "C:/1212.txt".

    secondo stackoverflow.com/questions/625332/… il DIRECTORY_SEPARATOR sarebbe necessaria perché ci SONO altri OS che NON uso / e \ vedi anche edward.de.leau.net/…

    OriginaleL’autore

  3. 9

    Quando nit tratta di PSPath Separators ecco un suggerimento per voi:

    Linux supporta / solo

    Di supporto di Windows \ e /

    quindi il mio consiglio sarebbe quello di rendere il tutto /

    define('DS','/'); //Should work.

    Se la tua creazione di applicazioni cross platformt gallina pensare di fare questo.

    define('DS','/');
    define('BASE_ROOT',str_replace('\\',DS,dirname(__FILE__)));
    require_once BASE_ROOT . DS . 'includes' . DS . 'init.php';

    Quindi dovrebbe funzionare bene su entrambe le piattaforme.

    Imparare:

    http://en.wikipedia.org/wiki/Filename

    http://en.wikipedia.org/wiki/Path_(informatica)

    OriginaleL’autore

  4. 1

    DIRECTORY_SEPARATOR restituisce / su sistemi Unix e \ su Win.

    OriginaleL’autore

  5. 0

    DIRECTORY_SEPARATOR è una costante PHP, per aiutare i programmatori a scrivere script che funziona su sistemi operativi diversi.

    Supponendo che si sta su una macchina Windows, sembra che il tuo è configurato in modo errato.

    OriginaleL’autore

  6. 0

    Ho visto alcuni errori sul blog, e in altri luoghi per quanto riguarda Windows sta “bene” con barre, e non c’è bisogno di *Separatore di Directory costanti che forniscono \ o /caratteri, a seconda se si esegue Windows, Nix, ecc

    Queste costanti sono /molto/necessario perché in avanti barra di supporto in Windows è solo //parzialmente implementato.

    La maggior parte di Windows Utilità di Linea di Comando interruttori che sono accessibili utilizzando /, barra, piuttosto che i trattini, che è in stile unix. Questo è il motivo per cui il separatore di directory costanti sono importanti in script.

    Rotto Esempio:

    C:\Temp>del C:/Temp/*.o /S /Q

    Messaggio di errore: parametro non Valido – “Temp”.

    C:\Temp>

    OriginaleL’autore

  7. 0

    DIRECTORY_SEPARATOR è molto inutili.

    IMHO dovrebbe essere eliminato definitivamente.

    Non ci sono OS che per altri usi di ‘/’, voglio dire, so che si potrebbe eseguire un webserver (MacOs classic? sul serio?)

    Al commento “il Vento E la Fiamma” di risposta, il suo esempio è rotto troppo, perché se si decide di eseguire comandi di sistema, poi si perde la portabilità in ogni caso. Naturalmente il sistema di comando sono espresse nel sistema di sintassi. Ma Ogni comando PHP che avvolgono le chiamate di sistema, come fopen, file_get_content ecc funzionano bene con ‘/’ su windows.

    OriginaleL’autore

Lascia un commento