2016-03-30 10 views
0

Ich verstehe nicht, was hier vor sich geht. Ich habe folgendes:Pfad wird ignoriert

set_include_path(
    get_include_path() 
    .PATH_SEPARATOR.'/home/mike/www/Zend/library/' 
); 

, die korrekt den Wert einzustellen erscheint:

var_dump(get_include_path()); 
// string(61) ".:/usr/share/php:/usr/share/pear:/home/mike/www/Zend/library/" 

Diese sollte Arbeit, aber es produziert Fatal error: Class 'Zend\Loader\StandardAutoloader' not found:

require_once 'Zend/Loader/StandardAutoloader.php'; 

Aber wenn ich das verwenden vollständiger Pfad funktioniert einwandfrei:

require_once '/home/mike/www/Zend/library/Zend/Loader/StandardAutoloader.php'; 

Irgendwelche Ideen warum verwendet es nicht den Include-Pfad in diesem Fall?

+0

Funktioniert es mit require()? 'require 'Zend/Loader/StandardAutoloader.php';' –

+0

@ ZamronyP.Juhara Ich sehe nicht, wie das anders ist, aber nein, es funktioniert nicht. – Mike

Antwort

0

Vom include manual:

The include construct will emit a warning if it cannot find a file; this is different behavior from require, which will emit a fatal error.

dann bemerkte ich, dass das Skript nicht zu einem schwerwiegenden Fehler während der require emittieren hat, sondern stattdessen war es in der nächsten Zeile, die den Fehler verursacht wurde:

$loader = new Zend\Loader\StandardAutoloader($config); 

Deshalb war die require Zeile einschließlich etwas, nur dass das nicht die Zend\Loader\StandardAutoloader Klasse enthielt.

ich dann dieses kleine Skript aufgepeitscht, um zu sehen, wo er herkam:

$include_paths = explode(PATH_SEPARATOR, get_include_path()); 
foreach ($include_paths as $path) { 
    $file = 'Zend/Loader/StandardAutoloader.php'; 
    echo $path .'/'. $file; 
    echo '...'; 
    echo (file_exists($path . '/'. $file)) ? '<b>exists</b>' : 'doesnt exist'; 
    echo '<br>'; 
} 

Dies ist das Ergebnis:

./Zend/Loader/StandardAutoloader.php...doesnt exist 
/usr/share/php/Zend/Loader/StandardAutoloader.php...exists 
/usr/share/pear/Zend/Loader/StandardAutoloader.php...doesnt exist 
/home/mike/www/Zend/library/Zend/Loader/StandardAutoloader.php...exists 

So stellt sich heraus, dass ich hatte zwei Dateien, die beide passte zu dem, was ich versuchte einzubeziehen. Wenn ich /usr/share/php/Zend/Loader/StandardAutoloader.php öffne, sehe ich stattdessen die Klasse Zend_Loader_StandardAutoloader ohne Namespace. Dies ist von Zend Framework 1.12.9, aber meine App verwendet Version 2.2.

0

Von Include documentation

Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include will finally check in the calling script's own directory and the current working directory before failing.

Wenn Sie Zend/Loader/StandardAutoloader.php dann wird angenommen, dass Dateipfad angegeben wird, so dass es auf diesem Weg verwendet, die natürlich darauf nicht Verzeichnis zu korrigieren. Wenn Sie StandardAutoloader.php verwenden, wurde include_path verwendet, um dies zu finden.

+0

Eigentlich habe ich es richtig gemacht. Wie Sie sehen können, setze ich den Include-Pfad so, dass er den Zend-Ort enthält. Allerdings sehe ich meine Antwort für das, was wirklich vor sich ging. – Mike