getimagesize(\2): failed to open stream

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

ps2freak

Mitglied
21 Mai 2011
86
0
6
Warning: getimagesize(\2): failed to open stream: No such file or directory in C:\xampp\htdocs\site\pictures.php on line 168

Diesen Fehler bekomme ich und ich habe ehrlich gesagt keine Ahnung weshalb, ich habe in den letzten paar Stunden alles Mögliche ausprobiert, aber es will einfach nicht klappen...

Ich lese hiermit einen BB-Code aus:
PHP:
function bb_img($str){
    $str = preg_replace("/\[img width=(.*) src=(.*)\]/Usi", $x= new build_image("\\1", "\\2"), $str);
    return $str;
}

Und das ist die Klasse:
PHP:
class build_image{
    private $imgsrc;
    private $imgwidth;
    private $imgheight;
   
    function __construct($imgwidth, $imgsrc){
        $this->imgwidth=$imgwidth;
        $this->imgsrc=$imgsrc;
        $size = getimagesize("$this->imgsrc");
        $multiplikator = $this->imgwidth / $size["0"];
        $this->imgheight = $multiplikator * $size["1"];
    }
   
    function __toString(){
        return "<img src=\"$this->imgsrc\" width=\"".$this->imgwidth."px\" height=\"".$this->imgheight."\" />";
    }
}

Ich weiß dass ich das nicht unbedingt über eine Klasse machen muss, ich hatte vorher eine einfache Funktion für das Ganze, aber da hats nicht geklappt und ich habe eben alles mögliche probiert....
Das Komische ist, wenn ich beim Verarbeiten des BB-Codes anstelle der Erzeugung eines Objekts einfach die Ergebnisse ausgebe, etwa so:
PHP:
function bb_img($str){
    $str = preg_replace("/\[img width=(.*) src=(.*)\]/Usi", "\\1 \\2", $str);
    return $str;
}
dann sehe ich auf der Seite in der Tat den Wert für die Breite (die im BB-Code ja angegeben wurde) sowie die im BB-Code angegebene URL des Bildes. Tatsächlich hapert es nur an der getimagesize() Funktion, denn wenn ich die Berechnung der Höhe weglasse und der Höhe einfach einen festen Wert gebe, wird das Bild auch tatsächlich angezeigt - mit der im BB-Code angegebenen Breite sowie der von mir festgelegten Höhe, das sieht im Code dann etwa so aus:
PHP:
class build_image{
    private $imgsrc;
    private $imgwidth;
    private $imgheight;
   
    function __construct($imgwidth, $imgsrc){
        $this->imgwidth=$imgwidth;
        $this->imgsrc=$imgsrc;
        $this->imgheight = 33;
    }
   
    function __toString(){
        return "<img src=\"$this->imgsrc\" width=\"".$this->imgwidth."px\" height=\"".$this->imgheight."\" />";
    }
}

Hier nochmal mein BB-Code mit dem ich getestet habe:
https://www.google.de/images/srpr/logo11w.png][/url]


Ich bin gerade echt am Verzweifeln, weil ich doch eigentlich alles richtig gemacht habe, oder? Ich mein, irgendwas muss doch mit der getimagesize() Funktion nicht stimmen, wenn alles andere klappt... Wenn ich allerdings in einer neuen, komplett leeren Seite die Funktion getimagesize auf die oben gezeigte URL (des Google Logos) anwende, funktioniert es tadellos... Ich weiß echt nicht mehr weiter - HIIIIIIIIIIIILFEEEEEE!!!



Ich hoffe irgendjemand hier hat ne Ahnung was da nicht hinhauen könnte! MfG.
 

T-sneak

Mitglied
10 Mai 2005
623
4
18
28
Rosenheim
jonato.de
Ich denke das dein Pfad den du übergibst nicht existiert? Sprich imgsrc gibt's gar nicht.. Und außerdem kannst einfach nur die variable in die Funktion schreiben ohne die Anführungszeichen
 
B

bdt600

Guest
Da hilft bestimmt:

Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

ps2freak

Mitglied
21 Mai 2011
86
0
6
Ich denke das dein Pfad den du übergibst nicht existiert? Sprich imgsrc gibt's gar nicht.. Und außerdem kannst einfach nur die variable in die Funktion schreiben ohne die Anführungszeichen
Ja, es sieht so aus, als wenn der Pfad schon beim Erzeugen des Objekts irgendwie falsch übergeben wird, denn wie gesagt, wenn ich \\2 (was ja der Pfad ist) direkt ausgebe, wird auch korrekt angezeigt. Ich habe jetzt als zweiten Parameter für das Objekt anstatt von "\\2" einfach "https://www.google.de/images/srpr/logo11w.png" eingesetzt, also eigentlich ja das gleiche (eigentlich, anscheinend wirklich nur eigentlich). Und siehe da, getimagesize arbeitet normal! Ich habe mir mittels echo mal die von der Funktion zurückgegebenen Werte anzeigen lassen, alles wunderbar. Das verwirrt mich doch etwas, also scheint ja wirklich irgendwas schief zu laufen, wenn ich als zweiten Parameter den Pfad der eigentlich im BB-Code steht übergebe...
Dabei habe ich allerdings bemerkt, dass meine Rechnung, so wie ich sie durchgeführt habe (vermutlich aufgrund der Kommazahl, die dabei rauskommt), so noch nicht funktioniert, aber das stell ich erstmal beiseite, denn ich frage mich immernoch wieso die verdammte, aus dem BB-Code ausgelesene URL nicht funktioniert.........

Da hilft bestimmt:

Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
1. Exakt
2. Done
3. Done
4. Done (siehe oben)
5. Done (wobei kein MySQl im Mo0ment zum Einsatz kommt, ich schicke den BB-Code direkt von einem Textfeld auf die Seite die ihn verarbeitet)
6. Done
7. Done!?!
8. Done
9. Schön wärs

Leider hat mir das nicht wirklich geholfen, error-reporting hatte ich schon drinne, hab jetzt das aus 2. noch hinzugefügt, aber ändern tut dies rein garnichts. Wäre es deiner Meinung nach immernoch unpassend um Rat zu Fragen? Ich hoffe wirklich dass ihr mir da helfen könnt...


MfG.
 
B

bdt600

Guest
Ich glaube kaum, dass du eine Grafik mit dem Namen "\2" hast, also doch noch nicht "Richtig debuggen" durchgeführt und alle Variablen ausgeben lassen.
 

ps2freak

Mitglied
21 Mai 2011
86
0
6
Okay. Natürlich habe ich keine Grafik mit dem Namen "\2" - genau das ist ja auch der Fehler. WELCHE Variable soll ich denn noch ausgeben? Wenn ich $imgsrc ausgebe kommt ebenfalls "\2" - das hatte ich schon probiert und gerade nochmal gemacht um sicherzugehen. Wenn ich nicht der festen Überzeugung wäre, dass ich von alleine auf die Lösung des Problems komme würde ich doch nicht im Forum fragen, oder? Ich bin keiner der sofort wenn etwas nicht funktioniert erstmal im Forum nachfragt, wenn ich das jedes mal wenn etwas nicht gleich klappt machen würde dann will ich nicht wissen wie hoch mein Beitragscounter hier im Forum wäre ;)

MfG.


Edit:
Die Breite wird übrigends auch nicht übermittelt, es kommt auch da nur "\1" raus, deshalb klappt wahrscheinlich auch die Berechnung der Höhe nicht - das Seltsame: Im Quelltext des Dokuments steht der von toString ausgegebene img tag, zwar ohne dem Pfad des Bildes, aber komischerweise stehen dort die 64 Pixel drinne :O jetzt bin ich endgültig verwirrt.....
 
Zuletzt bearbeitet:
B

bdt600

Guest
Okay. Natürlich habe ich keine Grafik mit dem Namen "\2" - genau das ist ja auch der Fehler. WELCHE Variable soll ich denn noch ausgeben? Wenn ich $imgsrc ausgebe kommt ebenfalls "\2" - das hatte ich schon probiert
Und dann kommst du nicht auf die Idee, dass

$str = preg_replace("/\/Usi", [B]$x= new build_image("\\1", "\\2")[/B], $str);

der Knackpunkt ist, um nicht zu sagen, der Blödsinn ist? Was willst du da außerdem mit dem Object?
 

ps2freak

Mitglied
21 Mai 2011
86
0
6
Ich weiß dass das mit dem Objekt unnötig ist, ich hab das (als erstes schon) auch als Funktion probiert (es war natürlich naiv zu glauben dass es was ändern würde wenn ich das als Objekt mache, es hätte mir klar sein müssen dass das nichts ändern wird, aber wie gesagt habe ich einfach alles mögliche probiert):
$str = preg_replace("/\/Usi", build_image("\\1", "\\2"), $str);
Gut vielleicht ist es Blödsinn, könntest du mir dann vielleicht nettwerweise sagen wie man das ohne Blödsinn löst? Ich wäre dir sehr dankbar ;)

MfG.
 

ps2freak

Mitglied
21 Mai 2011
86
0
6
Wahrscheinlich hätte ich eher darauf kommen können. Vielleicht hätte ich darauf kommen müssen. Es wäre aber deutlich einfacher gewesen wenn du mir einfach gesagt hättest wo der Fehler liegt, denn offensichtlich war es dir von Anfang an klar. Ich danke dir für den ersten Beitrag mit dem Hinweis auf richtiges debuggen, aber das danach war unnötig, Hinweise nehme ich gerne zur Kenntnis aber anstatt mir einfach zu sagen wo der Fehler liegt wenn es doch so offensichtlich ist^^

Jedenfalls lautet die Lösung: preg_replace_callback
Thema ist durch, danke für nix!
 
Werbung: