Tomy55 wrote: ↑Tue Dec 22, 2020 6:50 pm
Da ich zwar weis was "
!is_file(DIR_IMAGE . $filename)" prüft (ist die Datei überhaupt da?) aber mir leider nicht ganz klar ist, wozu der Rest dient, kann ich das ganze leider nicht als abgeschlossen betrachten.
is_dir ist soweit klar: überprüft ob eine Datei oder ein Ordner existiert.
realpath löst einen Pfad in einen eindeutigen und absoluten auf, siehe
https://www.php.net/manual/de/function.realpath.php
Die Kombination aus beiden in den diversen Dateien dient dazu, dass die Pfade (und meist damit verbundenen Ordner bzw. Dateien) auf verschiedenen System *nix & Windoofs gleich sind.
Die
str_replace function wiederum sorgt dafür dass nur *nix-Pfade letztendlich überbleiben:
/ (= Windoofskompatibilität).
Das auch daher, da manche "Benutzer" irgendwas speichern und dann diese unnötige Mischung letztendlich wieder einen "richtigen" Pfad ergibt.
Beispiel: c:/meine/datei\welche/irgend\wo/ist ergibt dann: c:/meine/datei/welche/irgend/wo/ist
Warum das jetzt auf diesem Stratoserver mit Solaris nicht funktioniert, kann mehrere Gründe haben.
Zum Einen: warum Solaris und nichts vernünftiges?
Desweiteren könnte es sein, dass auf diesen Servern die Rechte nicht passen: "execute" Flag nicht gesetzt ist (was ich jetzt am stärksten vermute) - auch dann greift realpath nicht.
Noch ein Satz zu
Was ich nicht verstehe ist, was hier nun verglichen wird.
Ist doch auch ziemlich klar was hier und warum verglichen wird - oder?
Als Erstes wird nachgesehen ob die Datei/der Ordner überhaupt vorhanden ist.
Als Zweites wird überprüft ob der bereinigte Serverpfad mit dem bereinigten Bilderpfad übereinstimmt - nach dem: oder ||
Also entweder 1. Bedingung oder 2.
Passt eine der beiden nicht, dann (zurück) > return
Man könnte jetzt - wenn man Zeit & Lust hat, diese 1 Zeile auf 2 aufteilen - dann würde man sehen wo der Stratoserver seine Probleme hat.
Code: Select all
if (!is_file(DIR_IMAGE . $filename ) {
trigger_error( 'Keine Datei/Kein Ordner oder nicht vorhanden' );
}
if( substr(str_replace('\\', '/', realpath(DIR_IMAGE . $filename)), 0, strlen(DIR_IMAGE)) != str_replace('\\', '/', DIR_IMAGE ) ) {
trigger_error( 'Pfadangaben passen nicht' );
}
Das könnte man noch weiter ausbauen, habe aber dazu jetzt keine Lust mehr.
Generell können solche Server mit Solaris bei Strato nicht wirklich empfohlen werden.
Auch wegen der GLOB_BRACE Sache welche ja "bereinigt" wurde.
Diese "Eigenlösung" mag jetzt nur für diesen speziellen Fall anwendbar sein - wenn es funktioniert dann gut.
Empfohlen werden kann sie nicht, da keine generelle Lösung für das Problem - das wiederum nur auf und mit diesen Servern auftritt!