ilch Forum » Ilch Clan 1.1 » Fehlersuche und Probleme » Denksportaufgabe php7

Geschlossen
  1. #1
    User Pic
    IceT33 Mitglied
    Registriert seit
    22.10.2005
    Beiträge
    607
    Beitragswertungen
    9 Beitragspunkte
    Ich habe soweit 1.1 auf php7 lauffähig gemacht
    Jedoch habe ich in der Gallery und im Downloadbereich und in den Artikeln noch Fehler die ich nicht hinbekomme und eure Hilfe benötige.
    Ab dem öffnen der 2. untergruppe bekomme ich folgendn Fehler:
    Warning: Invalid argument supplied for foreach() in


    Der Code in der Zeile ist:
    function get_cats_title ($catsar) {
      $l = '';
    	foreach($catsar as $k => $v) {
    	  if ( $k != '' AND $v != '' ) {
    		  $l = $v.' :: '.$l;
    		}
    	}
    	return ($l);
    }
    
    function get_cats_urls ($catsar) {
      $l = '';
    	foreach($catsar as $k => $v) {
    	  if ( $k != '' AND $v != '' ) {
    		  $l = '<a class="smalfont" href="?gallery-'.$k.'">'.$v.'</a><b> &raquo; </b>'.$l;
    		}
    	}
    	return ($l);
    }


    irgendwie blicke ich das nicht ganz wie ich das php7 fähig machen soll


    verwendete ilch Version: 1.1 P

    betroffene Homepage: externer Link


    Zuletzt modifiziert von IceT33 am 29.09.2018 - 09:33:17
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.277
    Beitragswertungen
    356 Beitragspunkte
    Der Fehler sagt ja schon wo das Problem ist. Leider fehlt die Zeile des Fehlers in deiner Fehlermeldung.

    Jedenfalls wird wohl irgendwann get_cats_title() bzw. get_cats_urls() mit z.B. dem Argument $catsar = null oder '' aufgerufen.

    ZitatZitat
    foreach arbeitet nur mit Arrays und Objekten zusammen und gibt beim Versuch es mit einer Variablen mit einem anderen Datentypen oder einer nicht initialisierten Variablen zu benutzen einen Fehler aus.

    php.net/manual/de/control-structures.foreach.php

    Du könntest die folgende Zeile vor der Foreach-Schleife einfügen um dann z.B. in der error.log zu gucken welchen Wert $catsar hatte als der Fehler aufgetreten ist:
    file_put_contents('php://stderr', print_r($catsar, TRUE));
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    IceT33 Mitglied
    Registriert seit
    22.10.2005
    Beiträge
    607
    Beitragswertungen
    9 Beitragspunkte
    Das Problem oben habe ich soweit lösen können.
    Nun habe ich ein neues problem entdeckt wenn ich ein Avatar hochladen will kommt folgende Fehlermeldung:
    Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /www/htdocs/xxxxxxxx/bub/include/includes/func/ic_mime_type.php on line 39


    Der Code von der ic_mime_type.php :
    <?php
    
    /*
    
    Magic mime file interpreter
    Copyright (c) 2004 by Phillip Berndt
    Version 1.0
    
    */
    
    function ic_mime_type ($file) {
      if (!file_exists($file)) {
        return ('application/x-object');
      }
      if(!isset($mimeData)) {
       $mimeFile = array (
          '0		string			PK\003\004		application/x-zip',
          '0	string		Rar!		application/x-rar',
          '257     string          ustar\0         application/x-tar       posix',
          '257     string          ustar\040\040\0         application/x-tar       gnu',
          '0	string		GIF		image/gif',
          '0	beshort		0xffd8		image/jpeg',
          '0	string		\137PNG			image/png',
          '>30		string	Copyright\ 1989-1990\ PKWARE\ Inc.	application/x-zip',
          '>30		string	PKLITE\ Copr.	application/x-zip',
        );
        foreach($mimeFile as $mimeLine) {
          if($mimeLine[0] != '#' && trim($mimeLine)) {
            if(preg_match('/^(\S+?)\s+(\S+?)\s+(\S+)(\s+(.+?))?$/si', $mimeLine, $regex_mimeDataSet)) {
              $mimeDataSet['offset'] = str_replace('>', '', $regex_mimeDataSet[1]);
              $indicator = $regex_mimeDataSet[3];
              switch($regex_mimeDataSet[2]) {
                case 'string':
                  $indicator = str_replace('\ ', ' ', $indicator);
                  $indicator = str_replace('\<', '<', $indicator);
                  $indicator = str_replace('\>', '>', $indicator);
                  $indicator = str_replace('\r', "\r", $indicator);
                  $indicator = str_replace('\n', "\n", $indicator);
                  $indicator = preg_replace('/\\\\([0-9]{3})/e', 'chr($1);', $indicator);
                  break;
                case 'byte':
                  $indicator = pack('c', @eval('return '.$indicator.';'));
                  break;
                case 'short':
                  $indicator = pack('s', @eval('return '.$indicator.';'));
                  break;
                case 'beshort':
                  $indicator = pack('n', @eval('return '.$indicator.';'));
                  break;
                case 'leshort':
                  $indicator = pack('v', @eval('return '.$indicator.';'));
                  break;
                case 'belong':
                  $indicator = pack('N', @eval('return '.$indicator.';'));
                  break;
                case 'lelong':
                  $indicator = pack('V', @eval('return '.$indicator.';'));
                  break;
                case 'long':
                  $indicator = pack('l', @eval('return '.$indicator.';'));
                  break;
              }
    
              $mimeDataSet['indicator'] = $indicator;
              $mimeDataSet['mime'] = str_replace("\r", '', $regex_mimeDataSet[5]);
    
              $mimeData[] = $mimeDataSet;
            }
          }
        }
      }
      $o = fopen ($file, "r");
      $file_content = fgets($o, 4096);
      fclose($o);
      
      $retVal = 'application/x-object'; foreach($mimeData as $key => $mimeTest) {
      $testStr = substr($file_content, $mimeTest['offset'],
      strlen($mimeTest['indicator'])); if($testStr == $mimeTest['indicator']) {
      $mimeType = $mimeTest['mime']; if($mimeType == '') { while($mimeType == '') {
      $mimeType = $mimeData[++$key]['mime']; } } $retVal = $mimeType; } } return
      $retVal; }
    ?>


    hat jemand eine lösung?


    Zuletzt modifiziert von IceT33 am 03.10.2018 - 23:34:27
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Naja das Problem ist halt (wie in der Fehlermeldung auch schon beschrieben), dass mit php7 die preg_replace-Funktion nicht mehr unterstützt wird. Ich habe selber einige Probleme, die BBCode-Klasse dementsprechend anzupassen, deshalb kann ich erstmal keine große Hilfe bei diesem Problem sein. Aber eventuell findet sich hier jemand, der das mal in einem verständlichen Deutsch erklärt oder sich direkt der Sache mal persönlich annimmt.
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Jens238 Mitglied
    Registriert seit
    20.03.2013
    Beiträge
    404
    Beitragswertungen
    44 Beitragspunkte
    Die preg_replace Funktion ist sehr wohl noch Teil von php7, nur der /e Modifier wurde in php7 endgültig
    verworfen. In vorherigen Versionen wurde er nur als "veraltet" markiert, hat aber noch funktioniert.

    Ich schließe mich hier mal der Suche nach einer verständlichen Erklärung an...


    PS.: Unter Verständlich verstehe ich: Kein Upgrade Hinweis auf Ilch 2.0 lächeln
    1 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    ZitatZitat geschrieben von Outi77
    Aber eventuell findet sich hier jemand, der das mal in einem verständlichen Deutsch erklärt oder sich direkt der Sache mal persönlich annimmt.

    Ja oder nein?
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten