thenew: php auf kompatilität prüfen php 7.4

problematische Seite

Hallo!

Habe hier ein problem mit meinem php script, welches bisher super lief aber auf einmal den Dienst quittierte. Da es bisher super lief, fürchte ich, dass irgendwas obsolete sei muss und komm nicht drauf ... hat jemand eine idee?

Das Script hat die Aufgabe bei Aufruf das neueste Bild im Ordner zu finden und anzuzeigen.

(Es existiert eine Webcam welche alle 10min ein Bild liefert. Angezeigt soll bei Aufruf des Links nur das neueste Bild, was wie gesagt bisher super funktionierte)

Vielen Dank im Voraus!

Quelltext hier<?php

function isImageFile($file) {
    return preg_match("/.*_\d+_TIMING\.jpg$/", $file);
}

function cmpFiles($a, $b) {
    $re = "/.*_(\d+)_TIMING\.jpg$/";
    preg_match($re, $a, $ma);
    preg_match($re, $b, $mb);
    return $ma[1] < $mb[1];
}


ini_set("gd.jpeg_ignore_warning", 1);
$image_folder = './incomming';
$show_file = 'images/folio/no-image.jpg';
$logoUrl = "./logo_klein.png";

if ($handle = opendir($image_folder)) {
    $files = scandir($image_folder);
    $files = array_filter($files, "isImageFile");
    usort($files, "cmpFiles");    
    if(count($files) > 1) {
        $show_file = $files[1];
    }
    for($file = 2; $file < count($files); $file++) {
        unlink("$image_folder/$files[$file]");
    }
}

$im = @imagecreatefromjpeg("$image_folder/$show_file");
$cam_image = imagecreatefrompng($logoUrl);
$xLogo = imagesx($cam_image);
$yLogo = imagesy($cam_image);
$xCam = imagesx($im);
$yCam = imagesy($im);
imagecopy($im, $cam_image, $xCam-$xLogo-50, $yCam-$yLogo-50, 0, 0, $xLogo, $yLogo);
imagedestroy($cam_image);

header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
  1. problematische Seite

    Tach!

    Da es bisher super lief, fürchte ich, dass irgendwas obsolete sei muss und komm nicht drauf ... hat jemand eine idee?

    Wenn du in den Netzwerk-Tab in den Entwicklertools schaust, siehst du, dass in den Response-Headern der Content-Type so gesetzt ist, wie dein Script vorgibt. Das heißt, dass das Script zumindest bis zu dieser Zeile läuft.

    Als nächstes kannst du versuchen, dir anzuschauen, was die Ausgabe des PHP-Scripts ist, indem du es speicherst und den Inhalt in einem Texteditor anschaust. Da sieht man nämlich eine Warnung in der Ausgabe und danach die Binärsuppe des Bildes. Das heißt, der PHP-Code an sich ist immer noch kompatibel.

    Am einfachsten ist ein Rechtsklick auf den Link zur "problematischen Seite" und "Speichern unter / Save as". Alternativ kannst du auch im Script den Content-Type auf "plain/text" setzen, dann sollte auch der Browser was anzeigen.

    dedlfix.

    1. problematische Seite

      Hallo thenew,

      Warning: imagecreatefrompng(): gd-png: libpng warning: iCCP: known incorrect sRGB profile in /home/.sites/***/wetter/weatherimage_sicherung.php on line 33

      Ob diese libpng-Warnung zum Fehlerbild führt, weiß ich nicht. Vielleicht ist da ein Installationsunterschied bei den PHP Versionen.

      Aber grundsätzlich:

      In eine produktive php.ini gehört (unter anderem)

      error_reporting = E_ALL
      display_errors = Off
      log_errors = On
      error_log = ...
      

      Der Wert für error_reporting laut Vorschlag von PHP wäre E_ALL & ~E_DEPRECATED & ~E_STRICT.

      In error_log muss man einen Ordner angeben, wo die Fehler-Logdatei gespeichert werden soll.

      Nicht jeder Hoster erlaubt das Setzen von error_log, da muss man schauen was geht. Das Schreiben einer Logdatei erfordert auch Schreibrecht des PHP Prozesses auf den Ordner, auch das ist bei einfachen Hostern nicht immer gegeben.

      Es sollte auf jeden Fall in einen Ordner geloggt werden, der per Web nicht abrufbar ist oder dessen Name hinreichend obskur ist, um nicht erraten zu werden.

      Bei meinem Hoster geht's auch nicht, soweit ich weiß, deshalb enthalten meine Scripte immer einen eigenen Error-Handler, der in ein Array loggt. Wenn ich teste, gebe ich dieses Array in einen footer auf der Seite aus. Ein Exception-Handler für ungefangene Exceptions kommt auch noch hinzu, und abgerundet wird es über eine Shutdown Funktion, in der ich error_get_last() abfrage und Abstürze logge.

      Rolf

      --
      sumpsi - posui - obstruxi
  2. problematische Seite

    Warning: imagecreatefrompng(): gd-png: libpng warning: iCCP: known incorrect sRGB profile in /home/.sites/668/site1693889/web/crosstours/wetter/weatherimage_sicherung.php on line 33

    Nach Auflösung der Variable ist dieses die Zeile 33

    $cam_image = imagecreatefrompng( './logo_klein.png' );
    

    Die Warnung tritt auch mit PHP 8.1. auf.

    Test und Fehlerbehebung:

    Nachdem ich die Datei „logo_klein.png“ vom Server abgeholt, mit (dem deshalb ebenfalls meckerndem!) Gimp2 importiert und neu gespeichert habe erschien diese Warnung nicht mehr.

    Ich habe die betreffende Datei als „problematische Seite“ eingesetzt.

    1. problematische Seite

      Die Warnung stammt von der „libpng“. Das ist eine C-Libary, die PHP nur benutzt.

      Man kann die Warnung natürlich unterdrücken

      <?php
      
      ini_set( 'xdebug.remote_autostart', 0 );  
      ini_set( 'xdebug.remote_enable', 0 );
      ini_set( 'display_errors', 0 );
      error_reporting( 0 );
      
      
      $image = imagecreatefrompng( 'logo_klein.png' ); 
      header('Content-Type: image/jpeg');
      imagejpeg( $image );
      

      Allerdings sollte Dich das Ergebnis dazu inspirieren, das nicht zu tun:

      „Erfolg“ von imagecreatefrompng bei fehlerhaftem Farbprofil

      In der Kriegs- und Wirtschaftspropaganda der Sowjetunion, den Nazis und Putin wäre das sicherlich eine „Erfolgreiche Operation“.

      Es bleibt als Lösung, die Grafik z.B. in Gimp2 zu importieren und mit einem funktionierenden Farbprofil neu zu speichern.