Skript läuft auf lokalem PC, online aber nicht

tombe

Erfahrenes Mitglied
Hi,

ich habe eine DB in der technische Daten von verschiedenen Maschinen gespeichert sind. Jede dieser Maschinen hat eine Nummer anhand der sie eindeutig identifiziert werden kann.
Zusätzlich zu den Daten hab ich im Verzeichnis "bilder/maschinen/" eine gewisse Anzahl Bilder gespeichert (oder auch keines).
Angenommen die Maschine hat die Nummer 1234, dann lautet der Name des ersten Bildes 1234.jpg, der Namen des zweiten Bilder 1234_1.jpg usw.

Jetzt hab ich folgendes Skript das zunächst prüft ob überhaupt ein Bild vorhanden ist (hier also 1234.jpg). Anschließend wird geprüft ob zumindes ein zusätzliches Bild vorhanden ist (also 1234_1.jpg).

Das komische lokal auf meinem PC läuft alles ohne Probleme und ich hab hier noch nicht mal Apache o.ä. installiert, nur Windows IIS. Sobald ich die Datei ins Netz übertrage werden keine Bilder mehr angezeigt.

Hier mal der Teil des Skripts :

PHP:
if (file_exists("bilder/maschinen/" .mysql_result($SQL, $a, "nummer") .".jpg")) { 
@chmod("bilder/maschinen/" .mysql_result($SQL, $a, "nummer") .".jpg", "0777"); 
$bild = getimagesize("bilder/maschinen/" .mysql_result($SQL, $a, "nummer") .".jpg"); 
$faktor = 0; 
$faktor1 = 0; 
$faktor2 = 0; 
if ($bild[0] > 240) $faktor1 = $bild[0] / 240; 
if ($bild[1] > 240) $faktor2 = $bild[1] / 240; 
if ($faktor1 >= $faktor2) { 
$faktor = $faktor1; 
} else $faktor = $faktor2; 
if ($faktor <> 0) { 
echo('<a href="bilder/maschinen/' .mysql_result($SQL, $a, "nummer") .'.jpg" target="_blank" title="Zum Vergrößern Bild anklicken.">'); 
echo('<img src="bilder/maschinen/' .mysql_result($SQL, $a, "nummer") .'.jpg" width="' .$bild[0] / $faktor .'" height="' .$bild[1] / $faktor .'" border="0">'); 
echo('</a><br>'); 
echo('<font size="-2">Zum Vergrößern Bild anklicken.</font>'); 
} 
else echo('<img src="bilder/maschinen/' .mysql_result($SQL, $a, "nummer") .'.jpg" width="' .$bild[0] .'" height="' .$bild[1] .'" border="0">'); 
} 

if (file_exists("bilder/maschinen/" .mysql_result($SQL, $a, "nummer") ."_1.jpg")) { 
echo '<br><font size="-2"><a href="maschine_bilder.php?nummer=' .mysql_result($SQL, $a, "nummer") .'&bez=' .mysql_result($SQL, $a, "bezeichnung") .'&sn=' .mysql_result($SQL, $a, "seriennummer") .'" target="_blank">Weitere Bilder</a></font>'; 
}
Ich hab es außer mit file_exists auch schon mit is_file versucht. Lokal läuft es, wenn ich die Datei online stelle läuft es nicht.

Für die Befehle file_exists bzw. is_file muß doch nicht irgendeine zusätzliche Bibliothek auf dem Server installiert sein

Könnt ihr da mal einen Blick drauf werfen und mir sagen was da nicht stimmt.

Danke Thomas
 
was wird dir denn als Fehlermeldung angezegit? Setz mal error_reporting(E_ALL); gaaanz an den Anfang deines Skripts
 
Ich koennte mir vorstellen, dass es, wie so haeufig, an register_globals liegt. Dazu muesste man aber etwas mehr Code sehen, denn dieser hier scheint soweit okay. Nur die Herkunft von ein paar Variablen ist unklar. So koennte ich mir z.B. vorstellen, dass in der hier nicht zu sehenden SQL-Query eine uebergebene Variablen eingebaut wird.
 
Hallo ihr 2,

also error_reporting(E_ALL) hab ich jetzt drin. Aber ein Fehler wird nicht angezeigt.

An register_globals kann es auch nicht liegen. Ist sowohl lokal als auch im Netz abgeschaltet.

In der SQL-Abfrage werden schon bestimmte Werte übergeben (und mit $_GET ausgewertet), aber die Abfrage stimmt ja. Das ganze ist ein Suchformular, in dem man die DB nach bestimmten Maschinentypen durchsuchen kann. Bei der Suche werden auch alle Treffer richtig angezeigt und die Nummer durch die die Bilder (bzw. die Bildnamen) erkannt werden, wird auch angezeigt.

Habt ihr vielleicht noch eine andere Idee woran es liegen könnte bzw. ich ich der Sache auf die Spur komme

Gruß Thomas

Nachtrag :

auf dem lokalen PC läuft PHP 4.3.8
online auf dem Server läuft PHP 4.4.0
 
Zuletzt bearbeitet:
PHP:
@chmod("bilder/maschinen/" .mysql_result($SQL, $a, "nummer") .".jpg", "0777");

wird hier vielleicht eine Fehlermeldung unterdrückt?
 
Nein (leider) auch nicht. Hab sowohl das "@" als auch die ganze Zeile rausgenommen.

Ändert nichts daran.

Hab mir nebenher noch bei php.net die Funktionsbeschreibung durchgelesen. Dabei hab ich bei den Anmerkungen folgenden Eintrag gefunden :

file_exists under safe_mode works (I work with for php 4) doesn't work when owner of the dir where the file stands differs from the php-owner.

e.g. file_exists in this dir will give FALSE nevertheless the file exists

rights owner dir
drwxr-xr-x apache images

change the owner of the dir to the phpowner and file_exists works.

Also die safe_mode-Einstellungen sind überall die gleichen (OFF). Kann das was hier beschrieben wird weiterhelfen Wenn JA wie ändere ich dann die Rechte entsptechend.
 
Zuletzt bearbeitet:
bei Safemode = OFF solltest du damit keine Probleme haben..

aber lass dir doch mal zu jeder der DateiOperationen file_Exists() usw den Rückgabewert ausgeben.. so kannst du das vielleicht weiter eingrenzen!
 
Auch mit dem Rücgabewert ist es wie mit allem anderen auch.

Lokal : Wenn Bild da, Rückgabewert = "1", wenn kein Bild da, Rückgabewert = "".
Online: Egal ob Bild da oder nicht, Rückgabewert immer = ""

Irgendwie kommt es mir so vor als ob die Funktion (file_exists) einfach nicht ausgeführt wird.

Hab jetzt auch mal in einer neuen Datei :

PHP:
file_exists("bilder/maschinen/771.jpg")

direkt angegeben. Das Bild 771.jpg ist 100000000000% unter dem Namen und in dem Verzeichnis vorhanden. Ergebnis, es wird nicht angezeigt bzw. die Funktion findet es nicht.

Was kann dazu führen das die komplette Funktion auf dem Server einfach ignoriert wird.
 
dein Skript hat online auch die nötigen Rechte, um sich das Bild im dem Verzeichnis "anzuschauen".. das File kann ja dort liegen, aber dein Skript darf nicht in den Ordner gucken -> file_exists() or die ("Fehler"); <- irgendwie kann man sich auch hierbei den enstprechenden Fehler ausgeben lassen, finde ich auf die Schnelle leider nicht
 
Zurück