Lavorare con i percorsi dei file e gli archivi Phar
Lavorare con i percorsi dei file e gli archivi Phar in PHP può essere difficile. Il codice PHP all'interno di un file Phar considera i percorsi relativi come relativi all'archivio Phar, non relativo alla directory di lavoro corrente. Ecco un breve esempio:
Diciamo che sono i seguenti file:
phar/index.php
test.php
my.phar
Il file index.php si trova all'interno della directory phar. E 'il file di bootstrap per l'archivio phar:
function does_it_exist($file){
return file_exists($file) ? "true" : "false";
}
viene eseguito il file di bootstrap quando il file è incluso phar da uno script PHP. Il nostro file bootstrap farà semplicemente dichiarare la funzione "does_it_exist".
Proviamo l'esecuzione di codice diverso all'interno di test.php e vedere quali sono i risultati per ogni corsa:
//Run 1:
require_once 'phar/index.php'; //PHP file
$file = __DIR__ . "/index.php"; //absolute path
echo does_it_exist($file); //prints "false"
//Run 2:
require_once 'phar/index.php'; //PHP file
$file = "index.php"; //relative path
echo does_it_exist($file); //prints "false"
//Run 3:
require_once 'my.phar'; //phar file
$file = __DIR__ . "/index.php"; //absolute path
echo does_it_exist($file); //prints "false"
//Run 4:
require_once 'my.phar'; //phar file
$file = "index.php"; //relative path
echo does_it_exist($file); //prints "true"
Guarda Run 4. Questo codice include il file phar e passa la funzione di un percorso relativo. Relativo alla directory di lavoro corrente, index.php non esiste. Ma rispetto al contenuto dell'archivio phar, esiste, ed è per questo che stampa "vero"!
Quale versione di PHP? I wrapper di URL possono solo su verions => PHP 5.0.0 –
Hai provato la seguente raccomandazione dalla documentazione di ['file_exists()'] (http://php.net/file_exists): "Nota: i risultati di questa funzione sono memorizzati nella cache. Vedi clearstatcache() per maggiori dettagli. "? –
sì, ho provato il clearstatcache() - ma la cache lo memorizzerebbe come "esiste" e il mio problema è che non lo trova, quindi non è sicuramente il colpevole. – Lan