QRCodes funktionieren nicht nach Update



  • Hi,

    ich habe heute ein Update von 1.6 auf 1.9 (schrittweise über 1.7 und 1.8 ) gemacht. Außerdem habe ich Debian von 7.4 auf 9 (schrittweise) und php von 5.4.4 auf 5.6 angehoben. Eventuell hat auch noch eine Umstellung auf mariadb stattgefunden, die ich aber gerade nicht prüfen kann, ob die gegriffen hat.
    Nun funktioniert idoit wieder, nachdem ich den pfad von /var/WWW/i-doit auf /var/WWW/html/i-doit geändert habe - was einem ja auch erst mal gesagt werden muss.
    Nachdem ich nun Dank https://forum.i-doit.org/index.php/topic,4959.0.html dieses Beitrags die Suche repariert habe funktioniert nun alles wieder … bis auf der QR-Code.
    Der wird nun nicht mehr angezeigt.
    Im IE finde ich keine Hinweise. Chrome meint aber:
    Beim Aktivieren des Links erscheint der Fehler: Error loading QR Code
    der Link wird korrekt generiert: http://meine-ip/i-doit/src/tools/php/qr/qr.php?url=http://meine-ip/i-doit/&objID=1193
    die Bildaddresse http://meine-ip/i-doit/src/tools/php/qr/qr_img.php?&s=2&d=http%3A%2F%meine-ip%2Fi-doit%2F%3FobjID%3D1193
    in Chrome eingefügt erzeugt:

    Fatal error: Call to undefined function ImageCreate() in /var/www/html/i-doit/src/tools/php/qr/qr_img.php on line 1147

    Vorschläge, wie ich das Problem angehen kann?
    Vielen Dank, vorab!



  • Bei Debian Stretch ist anscheinend das Paket php5-gd nicht mehr vorhanden. Ich sehe drei Möglichkeiten:
    1. Das Paket selber erstellen
    2. Umstieg auf php7
    3. Zurückgehen auf Debian Jessie



  • Vielen Dank für die schnelle und präzise Antwort.
    zu Punkt 1: Gibt es da irgendwo detaillierte Schritt-für-Schritt-Anleitungen dafür, in denen jeder benötigte Befehl genannt und am Besten erklärt ist? Ich habe keine Idee, wie ich das angehen sollte.
    zu Punkt 2: würde ich testen, wenn Punkt 1 fehlschlägt. Habe aber Bedenken wegen Posts wie diesem: https://forum.i-doit.org/index.php?topic=5039.0.
    zu Punkt 3: würde ich nur ungern machen. Ich weiß nicht ob mir ein Downgrade überhaupt sauber gelingen würde. Der Snapshot ist mittlerweile gelöscht und ich bin schon froh, dass ich das System auf Stretch bekommen habe…
    ... Linux ist nicht so meine Welt ...



  • Ich sehe gerade, dass Debian Stretch eigentlich gar kein PHP5 mehr mitbringt. Selber kompilieren ist unter den Vorausetzungen sicher nichts für den Linux-Neuling.
    Schauen wir doch erst mal, wo Sie  wirklich stehen: Was sind denn die Ausgaben von

    lsb_release -a || uname -a

    php -v

    mysqld –version



  • :~# lsb_release -a || uname -a
    No LSB modules are available.
    Distributor ID: Debian
    Description:    Debian GNU/Linux 9.0 (stretch)
    Release:        9.0
    Codename:      stretch
    :~# php -v
    PHP 5.6.30-0+deb8u1 (cli) (built: Feb  8 2017 09:49:20)
    Copyright © 1997-2016 The PHP Group
    Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
        with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    :~# mysqld --version
    2017-07-03 14:32:27 3070601216 [Note] Using unique option prefix 'key_buffer' is error-prone and can break in the future. Please use the full name 'key_buffer_size' instead.
    mysqld  Ver 10.1.23-MariaDB-9+deb9u1 for debian-linux-gnu on i686 (Debian 9.0)
    :~#

    Danke vorab für die Mühe.



  • Sie haben also tatsächlich einen Zwitter aus Debian 8 und 9 auf der Platte. Das halte ich auf mittlere Sicht für eine schlechte Grundlage, da diese Kombination ziemlich einzigartig sein dürfte und auch nicht getestet werden wird. Mein Rat lautet deshalb: Gehen Sie auf PHP7.


  • administrators

    Hallo,

    ggf. würde ich einfach einen Umstieg auf eine neue Plattform umziehen, dann bist Du sicher, dass Du keine "verbastelete" Plattform hast. Im einfachsten Falle die virtuelle Appliance (gibt es bei uns im Eval Download Prozess auf der www.i-doit.com) als Basis nutzen. Die haben wir gerade auf Debian 9 geupdated und sollte als stabile Basis gut sein.

    Die Datenbanken idoit_data und idoit_system können einfach per mysqldump exportiert und importiert werden.



  • @dkirsten hört sich auch toll an, werde ich definitiv in Erwägung ziehen, wenn das hier keinen Erfolg hat.

    PHP habe ich nun auf php7 geupdatet:

    :~# php -v
    PHP 7.0.20-1~dotdeb+8.2 (cli) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
        with Zend OPcache v7.0.20-1~dotdeb+8.2, Copyright (c) 1999-2017, by Zend Technologies
    :~#  mysqld --version
    2017-07-04 10:47:32 3070588928 [Note] Using unique option prefix 'key_buffer' is error-prone and can break in the future. Please use the full name 'key_buffer_size' instead.
    mysqld  Ver 10.1.23-MariaDB-9+deb9u1 for debian-linux-gnu on i686 (Debian 9.0)
    

    leider ist jetzt anstelle meiner i-doit-Anmeldemaske folgendes zu lesen:

    " . $p_message . "\n"; die(); } // function if ((int) ini_get("memory_limit") < 128) { ini_set("memory_limit", "128M"); } // if if ((int) ini_get("upload_max_filesize") < 8) { ini_set("upload_max_filesize", "8M"); } // if // Check configuration parameters of php.ini // Allow FOPEN Wrapper for URLs. ini_set("allow_url_fopen", "1"); try { // Initialize framework. if (file_exists("src/config.inc.php") && include_once("src/config.inc.php")) { // Bootstrap. if (!include_once "src/bootstrap.inc.php") { startup_die("Could not find bootstrap.inc.php"); } // if // Include caching implementation. if (!include_once "src/caching.inc.php") { startup_die("Could not find caching.inc.php"); } // if global $g_dirs; // Temp cleanup. if (isset($_GET["IDOIT_DELETE_TEMPLATES_C"])) { $g_clear_temp = true; $l_directory = $g_dirs["smarty"] . "templates_c/"; } if (isset($_GET["IDOIT_DELETE_TEMP"])) { $g_clear_temp = true; $l_directory = $g_dirs["temp"]; } else { if (isset($_POST["IDOIT_DELETE_TEMP"])) { isys_glob_delete_recursive($g_dirs["temp"], $l_deleted, $l_undeleted); } } // if if ($g_clear_temp && isset($l_directory)) { echo "Deleting temporary files ...
    \n"; $l_deleted = 0; $l_undeleted = 0; isys_glob_delete_recursive($l_directory, $l_deleted, $l_undeleted, (ENVIRONMENT === 'development')); echo "Success: $l_deleted files - Failure: $l_undeleted files!
    \n"; unset($l_directory); if (isset($_GET["ajax"])) { die(); } // if } // if } else { if (!require_once "setup/install.inc.php") { startup_die("Could not start installer. Setup files not found."); } // if } // if } catch (Exception $e) { if (isset($_SERVER)) { isys_glob_display_error( stripslashes(nl2br($e->getMessage())) ); } else { printf($e->getMessage()); } die(); } // try try { // Process ajax requests. if (isset($_GET["ajax"])) { if (isys_application::instance()->session->is_logged_in()) { require_once("src/ajax.inc.php"); } } // if } catch (Exception $e) { if (isset($g_error) && $g_error) { isys_notify::error($g_error); } isys_notify::error($e->getMessage() . ' (' . $e->getFile() . ':' . $e->getLine() . ')'); die; } try { // Process api requests. if (isset($_GET['api'])) { try { switch ($_GET['api']) { case 'jsonrpc': include_once('src/jsonrpc.php'); break; } // switch } catch (Exception $e) { echo $e->getMessage(); } // try die; } // if // Main request handler. switch ($_GET["load"]) { /* case "test": if (isset($_GET['type'])) { $_GET['type'] = str_replace(chr(0), '', addslashes($_GET['type'])); if (file_exists("src/tests/i-doit/" . strtolower($_GET['type']) . ".php")) { global $g_comp_session; $g_comp_session->include_mandator_cache(); include_once("src/tests/i-doit/" . strtolower($_GET['type']) . ".php"); } } break; */ case "api_properties": include_once("src/tools/php/properties.inc.php"); break; case "property_infos": include_once("src/tools/php/property_infos.inc.php"); break; case "css": include_once("src/tools/css/css.php"); break; case "mod-css": include_once("src/tools/css/mod-css.php"); break; case "update": default: // The hypergate is the i-doit-internal entrypoint, in which all i-doit internal requests are running. include_once "src/hypergate.inc.php"; break; } // switch // Get PHP processing time. if (isset($g_config["show_proc_time"])) { if ($g_config["show_proc_time"] == true) { echo "\n"; } // if } // if } catch (SmartyException $e) { try { \idoit\View\ExceptionView::factory() ->setDi(isys_application::instance()->container) ->draw($e); } catch (Exception $e) { isys_glob_display_error($e->getMessage()); die(); } } catch (Exception $e) { isys_glob_display_error($e->getMessage()); die(); } 
    

    Beim Update habe ich mich an folgende Anleitung gehalten:
    https://ansas-meyer.de/programmierung/php/php-7-unter-debian-jessie-installieren/

    leider ergeben sich beim abschließenden Test unendlich viele Fehler - hier der Anfang:

    :~# cd /var/www/html/i-doit
    :/var/www/html/i-doit# find . -name "*.php" -exec php -l {} \; 1>/dev/null
    PHP Fatal error:  Cannot redeclare random_int() in ./vendor/paragonie/random_compat/lib/random_int.php on line 191
    PHP Fatal error:  Cannot declare class ArithmeticError, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php on line 5
    PHP Fatal error:  Cannot declare class DivisionByZeroError, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php on line 5
    PHP Fatal error:  Cannot declare class ParseError, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php on line 5
    PHP Fatal error:  Cannot declare class AssertionError, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php on line 5
    PHP Fatal error:  Cannot declare class TypeError, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php on line 5
    PHP Fatal error:  Cannot declare class Error, because the name is already in use in ./vendor/symfony/polyfill-php70/Resources/stubs/Error.php on line 5
    PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in ./updates/versions/v1.4/files/src/classes/libraries/nusoap/nusoap.php on line 7381
    PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in ./updates/versions/v1.5.2/files/src/classes/libraries/nusoap/nusoap.php on line 7381
    PHP Fatal error:  Cannot redeclare random_int() in ./updates/versions/v1.9.1/files/vendor/paragonie/random_compat/lib/random_int.php on line 191
    PHP Fatal error:  Cannot declare class ArithmeticError, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php on line 5
    PHP Fatal error:  Cannot declare class DivisionByZeroError, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php on line 5
    PHP Fatal error:  Cannot declare class ParseError, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php on line 5
    PHP Fatal error:  Cannot declare class AssertionError, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php on line 5
    PHP Fatal error:  Cannot declare class TypeError, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php on line 5
    PHP Fatal error:  Cannot declare class Error, because the name is already in use in ./updates/versions/v1.9.1/files/vendor/symfony/polyfill-php70/Resources/stubs/Error.php on line 5
    PHP Fatal error:  Cannot redeclare random_int() in ./updates/versions/v1.9/files/vendor/paragonie/random_compat/lib/random_int.php on line 191
    PHP Fatal error:  Cannot declare class ArithmeticError, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php on line 5
    PHP Fatal error:  Cannot declare class DivisionByZeroError, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php on line 5
    PHP Fatal error:  Cannot declare class ParseError, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/ParseError.php on line 5
    PHP Fatal error:  Cannot declare class AssertionError, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/AssertionError.php on line 5
    PHP Fatal error:  Cannot declare class TypeError, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/TypeError.php on line 5
    PHP Fatal error:  Cannot declare class Error, because the name is already in use in ./updates/versions/v1.9/files/vendor/symfony/polyfill-php70/Resources/stubs/Error.php on line 5
    PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in ./updates/versions/v1.5/files/src/classes/libraries/nusoap/nusoap.php on line 7381
    PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in ./updates/versions/v1.6/files/src/classes/libraries/nusoap/nusoap.php on line 7381
    PHP Fatal error:  Redefinition of parameter $p_status in ./updates/versions/v1.8/files/src/classes/modules/cmdb/dao/category/global/isys_cmdb_dao_category_g_its_type.class.php on line 217
    PHP Fatal error:  Redefinition of parameter $deprecated in ./updates/versions/v1.8/files/src/classes/modules/report/dao/isys_report_dao.class.php on line 200
    
    

    vielleicht gibt es ja eine einfach Lösung dafür - wie so oft. Zur Not habe ich einen Snapshot. Bin etwas ratlos, ob der vielen Fehler.



  • Das war nicht zielführend: Eine veraltete Anleitung zu nehmen, wo Sie bereits auf Debian Stretch geupdated haben.
    Also zurückgehen auf den alten snapshot und:

    apt-get update

    apt-get install php libapache2-mod-php php-bcmath php-cli php-common php-curl php-gd php-imagick php-json php-ldap php-mcrypt php-memcached php-mysql php-pgsql php-xml php-zip

    Falls das fehlschlägt, vorher

    apt-get remove php5

    ausführen und noch einmal

    apt-get install php libapache2-mod-php php-bcmath php-cli php-common php-curl php-gd php-imagick php-json php-ldap php-mcrypt php-memcached php-mysql php-pgsql php-xml php-zip

    Die Fehler in den polyfills sind übrigens irrelevant.



  • Danke! Das hat sofort funktioniert.

    :~# php -v
    PHP 7.0.19-1 (cli) (built: May 11 2017 14:04:47) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
        with Zend OPcache v7.0.19-1, Copyright (c) 1999-2017, by Zend Technologies
    
    

    Allerdings hat i-doit von der Veränderung trotz reboot und Apache-restart nichts gemerkt. Dort wurde fröhlich weiter die 5.6 angezeigt und die QR-Codes blieben verschwunden.
    Deshalb habe ich noch folgendes gemacht:

    a2dismod php5
    a2enmod php7.0
    service apache2 restart
    

    nun erhalte ich beim Aufruf der Webseite folgenden Fehler:

    Database error : php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution
    

    Dieser sah dem bereits erwähnten Fehler aus https://forum.i-doit.org/index.php/topic,5039.0.html so sehr ähnlich, dass ich in der /etc/php/7.0/cli die php.ini angepasst habe und den Eintrag mysqli.default_socket = /var/run/mysqld/mysqld.sock gesetzt habe.

    Das hat leider nicht geholfen. Wie mache ich nun weiter?

    Edit meint:
    Ich habe einen Ordner in /var/WWW/html parallel zu i-doit angelegt und test genannt. Darin eine index.php mit

    
       phpinfo();
    ?>
    
    

    angelegt. Diese Seite funktioniert.

    Edit2 meint:
    GENAIL!
    Die phpinfo() meint, dass

    Loaded Configuration File:  /etc/php/7.0/apache2/php.ini  
    

    die php.ini gar nicht im Ordner cli liegt. Deshalb habe ich die php.ini im apache2-Ordner genau so abgewandelt wie zuvor die andere. Nun funktioniert alles. PHP-Version in i-doit wird mit 7.0.19-1 angezeigt und die QR-Codes funktionieren wieder.

    DANKE für die Unterstützung!



  • Schauen Sie doch mal, was unter "src/config.inc.php" in der "Database configuration" unter "host" eingetragen ist. Wenn der Eintrag problematisch erscheint, dann sollten Sie hier "localhost" eintragen und noch mal gucken, ob es funktioniert.


  • i-doIT Team

    Hallo,

    wir haben letzte Woche unsere Knowledge Base für PHP 7 und Debian 9 angepasst:

    Zum Datenbank-Fehler haben wir vor einiger Zeit einen FAQ-Artikel geschrieben: Wenn unter src/config.inc.php ein "localhost" als Hostname eingetragen ist, wird der Unix Socket von MySQL/MariaDB verwendet. Das ist auch gut so, weil performant. Nur leider kann PHP damit nicht viel anfangen, weswegen PHP angepasst und Apache neu gestartet werden muss.

    Ich hoffe, das alles hilft schnell und einfach weiter 🙂

    Viele Grüße
    Benjamin


 


Datenschutz / Privacy Policy