2016-04-20 9 views
0

Ich bekomme false, wenn ich die Funktion is_readable für eine Datei verwende, die von meinem Host auf einer VM geteilt wird, das erwartete Ergebnis ist wahr.is_readable() gibt false zurück, während require_once true zurückgibt

Ich mache den Aufbau einer lokalen Entwicklungsumgebung für ein bestehendes Projekt. Ich möchte keine andere Funktion verwenden, weil es ein komplexes Legacy-System ist, und ich fürchte, ich würde andere potenzielle Probleme verbergen, auf die ich später in der Entwicklung stoße.

Die VM wird mit vagrant und virtualbox eingerichtet. Das Betriebssystem ist ein Windows Server 2008-Rechner mit Zend Server mit PHP 5.3-Hosting-Code, der auf dem Host, einem Mac, freigegeben ist.

Der freigegebene Ordner wird wie folgt erstellt:

vmConfig.vm.synced_folder "/path/to/shared/folder/cms", '/cms', mount_options: ["dmode=775,fmode=664,type=smb"], owner: 'wcmadmin', group: 'wcmadmin' 

Ein Stück Code zu sehen versucht, ob eine Datei lesbar ist. is_readable gibt false zurück. Ich führe das Skript über die Befehlszeile mit beiden Benutzern wcmadmin und Administrator und ich bekomme die gleichen Ergebnisse.

function smarty_core_assemble_plugin_filepath($params, &$smarty) 
{ 
    [...] 
    // try relative to cwd (or absolute) 
    if (is_readable($_plugin_filepath)) { 
     $_return = $_plugin_filepath; 
     break; 
    } 
    [...] 

Ich habe ein Testskript weiter zu graben:

echo 'is_readable: '; 
var_export(is_readable('C:\cms\path\to\file\file.php')); 
echo "\n"; 
echo 'require_once: '; 
var_export(require_once('C:\cms\path\to\file\file.php')); 

Und ich habe folgende Ergebnisse:

is_readable: false 
require_once: true 

file_get_contents auf die Datei mit den richtigen Inhalt zurückgibt.

Cygwin, die Berechtigungen für die Datei sind wie folgt:

$ ls -al C:\cms\path\to\file\file.php 
-rw-r--r-- 1 wcmadmin None 1498 Apr 18 07:22 C:\cms\path\to\file\file.php 

Dateien Pfad für die Zwecke dieser Frage geändert wurden. Auch wenn sie einige Diskrepanzen aufweisen, werden sie bei echten Tests korrekt aufgelöst.

+0

tun 'file_exists()' return true? –

+0

hat nicht bemerkt, dass Sie zuerst den freigegebenen Samba-Ordnertyp verwendet haben. Vielleicht möchten Sie http://stackoverflow.com/questions/10818770/php-is-readable-fails-on-readable-samba-directory lesen Freigeben des Ordnertyps, wenn das Problem weiterhin besteht –

+0

Ich verstehe nicht, warum Sie hier zwei verschiedene Dateipfade verwenden. 'C: \ gesca \ cms \ backend ....' scheint völlig anders als 'C: \ cms \ path \ to \ file.php' zu sein, also ist es nicht besonders überraschend, wenn man lesbar ist und das andere nicht. –

Antwort