GD-Library-Problem

sunstyle

Mitglied
Hallo an alle,

ich habe ein kleine Problem was die Bild-Erstellung mit Hilfe der GD-Library angeht.

Das Lustige an der Sache ist, dass es gestern noch ging und am eigentlichen Script nichts verändert wurde.

Es sieht folgendermaßen aus:

Ich habe ein Script (kann mich an den genauen Namen dieser Art von Script nicht mehr erinnern, ich umschreibe es schnell); es wird ein Auth-Code und eine Request-ID erzeugt, mit Hilfe der Request-ID wird eine image.php aufgerufen, welche anhand der Request-ID aus der Datenbank jetzt den Auth-Code ausliest und auf einem kleinen Bild verschnörkelt darstellt.

Jetzt zum eigentlichen Problem: Ich hatte seit eh und je am Anfang der image.php stehen:

PHP:
require('include/data/connect.php');

Dies funktioniert seit heute NICHT mehr.
Wenn ich jetzt diese Zeile ersetze durch den Inhalt der connect.php, in welcher grob folgendes steht:

PHP:
$db_host = 'localhost';
$db_user = 'user';
$db_pass = 'passwort';
$db_name = 'tabelle';

@mysql_connect($db_host,$db_user,$db_pass)
or die("<div style=\"font-family: verdana, arial, sans-serif; font-size: 10px;\">Verbindung zu ".$db_host." ist fehlgeschlagen! MySql meldet:<br />".mysql_error()."</div>");

@mysql_select_db($db_name)
or die("<div style=\"font-family: verdana, arial, sans-serif; font-size: 10px;\">Datenbank ".$db_name." konnte nicht ausgewählt werden! MySql meldet:<br />".mysql_error()."</div>");

dann funktioniert es. Dies ist mir allerdings zu unsicher, da die image.php im Root-Verzeichnis liegt.

Kann mir das jemand erklären? Woran könnte es liegen? (Wie gesagt, das Script an sich funktioniert, da es ja ein Bild erstellt mit dem Auth-Code wenn ich die MySQL-Connection direkt einbinde)

Vielen Dank für eure Hilfe!
 
Hallo,

bisschen wenig Information.

1. Kommt eine Fehlermeldung? Wenn ja, welche?
2. Funktioniert die MySQL-Verbindung? Wenn nicht, was sagt mysql_error?

Ansonsten noch: "ist mir zu unsicher, da es im Root liegt" ... nun, da der Pfad zur connect.php relativ ist, ist er genauso von außen zu erreichen wie die image.php ... es gibt also kein Sicherheitsvorteil/-nachteil in einem solchen Fall.

Ich würde schauen, ob die Datei wirklich da ist, wo sie das Script vermutet, ob sie vielleicht durch eine andere ersetzt wurde, oder das Script sogar eine andere aufruft. Des Weiteren sind die Rechte zu checken, wenn das Script dann doch richtig eingebunden wird, vielleicht liegt es daran.

Aber wie gesagt, ohne Infos ist es schwer zu helfen.
 
Einige Infos die du brauchst stehen bereits im Text; folgendermaßen:
Die MySQL-Verbindung funktioniert, in der connect.php steht ja das gleiche wie wenn ich es direkt in die image.php schreibe, und dann funktioniert es.

Fehlermeldungen kommen keine, auch nicht wenn ich komplettes Error-Reporting anschalte, auch per mysql_error kommt keine Fehlermeldung (die MySQl-Abfrage ist ja nicht das Problem, das funktioniert ja alles wenn ich die Connection direkt einbinde.

Wenn ich das Verzeichnis include/data/ per htaccess schütze ist der äußerliche Zugriff auf diese Datei allerdings nicht möglich, während die image.php im Root liegt und das Root-Verzeichnis sollte ja schon von außen erreichbar sein, und somit wäre die image.php von außen per Quelltextscript aufrufbar. Und meine Daten würde ich schon gerne schützen ;)

Die Datei ist vorhanden, soviel steht fest.

Ich kann leider nicht mehr Informationen geben, da ich selber keine mehr habe. Das genau ist ja mein Problem, weshalb ich mich an euch wende, vielleicht hat ja einer nen Geistesblitz.
 
Keine Änderung bei include.

Logische Konsequenz ist, dass es tatsächlich an dieser Zeile liegen muss.

Nur Warum?

Ich habe bereits versucht auf die Datei mit dem absoluten Pfad zuzugreifen, funktioniert auch nicht. Relativ ist es auch zwecklos. Sobald ich require(datei); oder inlude(datei); oben stehen habe funktioniert es nicht (mehr).
 
hi,

okay, wenn require fehlschlägt gibt's eigentlich einen Fatal Error, sodass die Scriptausführung abbrechen müsste.

Bindest du die image.php per <img>-Tag ein? Wenn ja, dann wirst du da natürlich keinen Fehler sehen, aber das weißt du selbst. Hast du mal versucht das Error_Reporting ins Error_Log umzuleiten und da zu schauen?

Funktionieren andere Dateioperationen, etwa "file()" etc. an der connect.php?

Hast du die PHP-Version geupdatet vielleicht? Ist die php.ini geändert worden? Gerade der SafeMode und OpenBaseDir sind Kandidaten dafür Dateioperationen kaputt zu machen, wenn sie falsch gesetzt sind.

Versuch mal die connect.php ins gleiche Verzeichnis wie die image.php zu legen und dann zu includen.

So, das war's erstmal, mal gucken was das bringt ;)
 
Hab sie mal ins gleiche Verzeichnis gelegt, funktioniert ebenfalls nicht.

Ja, ich include sie per <img>-Tag. Hab allerdings die gute image.php bereits per URL aufgerufen und es kam folgender Fehler:

PHP:
Warning: Cannot modify header information - headers already sent by (output started at /var/kunden/webs/gfxcomm/connect.php:1) in /var/kunden/webs/gfxcomm/image.php on line 44

Allerdings hab ich bereits die komplette Datei durchgeschaut, es gibt definitiv KEIN Output innerhalb der connect.php, und auch innerhalb der image.php gibts vor dem header-Befehl kein Output (wie gesagt, der eigentlich Code ja).
 
Hi,

na das ist doch mal ein Ansatz :-)

Du hast wahrscheinlich irgendwo eine Newline oder ein sonstiges, nicht sichtbares, Zeichen drin in deiner connect.php, direkt vor dem erstem <?php, wodurch schon ein Output erfolgt und eben der header nicht gesendet werden kann. Sowas ist fies, hatte ich selbst mal, kann man durchaus ein Weilchen suchen. Wenn du ganz sicher gehen willst, dann erstelle eine neue Datei, nenn sie meinetwegen connect1.php, und schreibe dort deine Daten per Hand (!) rein und include sie, dann _sollte_ sie funktionieren.

Bin gespannt ob's das war ;)
 
Okay, ich habe es gelöst. Folgendes Problem war es:

Weil mein Webspace die Buchstaben der Ausgabetexte nur als Fragezeichen dargestellt hat habe ich meine gesamten *.php-Dateien nochmal im Format UTF-8 gespeichert, unter anderem auch die connect.php (obwohl die gar keine Ausgabe hat, insofern blöd von mir).

Habs nun gerade mal getestet, ohne jegliche Formatierung ist die Datei jetzt 246kb groß, hab sie testweise nochmal mit UTF-8 gespeichert und schon ist sie 249kb groß und das Script funktioniert nicht mehr. Ohne die Formatierung funktioniert es wieder :)

Danke für eure/deine Mitarbeit :)
 
Zurück