zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP Unexpected character in input

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 23.06.2012, 22:55
body.ie {display: grotte}
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 09.01.2011
Beiträge: 841
take_a_7 sorgt für eine eindrucksvolle Atmosphäretake_a_7 sorgt für eine eindrucksvolle Atmosphäre
Standard PHP Unexpected character in input

Moin,

ich hab ein Problem mit einem PHP-Script. Ich erstelle eine Lambda-Funktion mit create_function, wie folgt:
PHP-Code:
$func create_function('$elem1, $elem2''return call_user_func(\''.$sort_function.'\', $elem1[\''.$sort_by_key.'\'], $elem2[\''.$sort_by_key.'\']);'); 
Dabei ist $sort_function die Rückgabe eines weiteren Aufrufs von create_function (also sowas wie "lambda_1"), $sort_by_key ist ebenfalls ein String, der nur aus Buchstaben besteht.
Ich erhalte jetzt folgenden Fehler, wenn ich das Script auf meinem Webspace ausführe (lokal gehts):
Code:
Warning:  Unexpected character in input:  ''' (ASCII=39) state=1 in /foo/bar/xy.php(63) : runtime-created function on line 1
Zeile 63 seht ihr oben. Ich habe auch schon Google bemüht, allerdings findet man da nur Fälle, wo jemand falsch escaped hat oder ein Anführungszeichen vergessen / zuviel hatte.
Weiß jemand Rat? Danke schon mal im Voraus,
gruß,
take
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 24.06.2012, 05:06
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Welche Werte (var_dump) haben die genutzten Variablen, wenn das Problem auftritt?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 24.06.2012, 11:50
body.ie {display: grotte}
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 09.01.2011
Beiträge: 841
take_a_7 sorgt für eine eindrucksvolle Atmosphäretake_a_7 sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

hier ist ein Script, dass das Problem zeigt:
PHP-Code:
<?php error_reporting(E_ALL);
$sort_function create_function('$elem1, $elem2''return $elem1 - $elem2;');
$sort_by_key 'a';
$function_body 'return call_user_func(\''.$sort_function.'\', $elem1[\''.$sort_by_key.'\'], $elem2[\''.$sort_by_key.'\']);';
?><pre><?php var_dump($function_body$sort_by_key$sort_function); ?></pre><?php
$bla 
create_function('$elem1, $elem2'$function_body);
echo 
$bla(array('a' => 0), array('a' => 3));
Lokal ist die Ausgabe:
Code:
string(62) "return call_user_func('lambda_67', $elem1['a'], $elem2['a']);"
string(1) "a"
string(10) "lambda_67"
-3
Online bekomme ich:
Code:
string(61) "return call_user_func('lambda_1', $elem1['a'], $elem2['a']);"
string(1) "a"
string(9) "lambda_1"

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /homepages/27/d342756222/htdocs/nspz/public/test.php(6) : runtime-created function on line 1

Parse error: syntax error, unexpected '}', expecting ')' in /homepages/27/d342756222/htdocs/nspz/public/test.php(6) : runtime-created function on line 1

Fatal error: Function name must be a string in /homepages/27/d342756222/htdocs/nspz/public/test.php on line 7
Lokal läuft PHP 5.4, auf dem Webspace läuft PHP 5.2.17.

Ich habe echt keine Ahnung, was das soll...

gruß,
take
Mit Zitat antworten
  #4 (permalink)  
Alt 24.06.2012, 12:48
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Besteht die Chance, den Code umzuschreiben? Was soll er leisten?

Ich kann dir nicht sagen, was PHP 5.2 da für Probleme hat, aber ich finde diese Anordnung ehrlich gesagt auch etwas schwer zu durchblicken. Habe das Gefühl, das geht einfacher.
Mit Zitat antworten
  #5 (permalink)  
Alt 24.06.2012, 12:54
body.ie {display: grotte}
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 09.01.2011
Beiträge: 841
take_a_7 sorgt für eine eindrucksvolle Atmosphäretake_a_7 sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

ich möchte ein Array basierend auf einem Key in diesem Array sortieren. Meinetwegen ich habe dieses Array (als JSON zu besseren Übersicht):
Code:
[
   {
        "key": "a",
        "irgendwas": "anderes"
    },
    {
        "key": "c",
        "nochwas": "anderes"
    },
    {
        "key": "b",
        "foo": "bar"
    }
]
Dieses möchte ich jetzt mit einer benutzerdefinierten Sortierfunktion (wie bei usort) sortieren, aber eben nach dem Unter-Schlüssel key. Dazu dachte ich mir, ich rufe usort auf das ganze Array auf und zwar mit einer Funktion, die die Sortierfunktion für die Unter-Keys aufruft. Mir schien das die einfachste Variante.

Ich hoffe ich habe das verständlich beschrieben

gruß,
take
Mit Zitat antworten
  #6 (permalink)  
Alt 24.06.2012, 13:35
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

So vielleicht?

PHP-Code:
<?php

function sortByKey($data$key)
{
    
// PHP kann deklarierte Funktionen nicht wieder aus dem Speicher entfernen.
    // Um zu verhindern, dass dieselbe Callback-Funktion bei wiederholtem Aufruf
    // dieser Funktion mit gleichem Key wieder neu generiert wird, wird die
    // Callback-Funktion für jeden Key zwischengespeichert
    
static $cache = array();

    if (!
array_key_exists($key$cache)) {
        
$cache[$key] = create_function(
            
'$a, $b',
            
'return strcmp($a["' $key '"], $b["' $key '"]);'
        
);
    }

    
usort($data$cache[$key]);

    return 
$data;
}

$data = array();
$data[] = array('blub' => 'a''irgendwas' => 'anderes');
$data[] = array('blub' => 'c''nochwas' => 'anderes');
$data[] = array('blub' => 'b''foo' => 'bar');

var_dump(sortByKey($data'blub'));
(Es wäre besser, die Funktionalität in eine Klasse zu packen und den Cache in eine Instanzvariable. Das würde das static vermeiden.)
Mit Zitat antworten
  #7 (permalink)  
Alt 24.06.2012, 13:45
body.ie {display: grotte}
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 09.01.2011
Beiträge: 841
take_a_7 sorgt für eine eindrucksvolle Atmosphäretake_a_7 sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

vielen Dank erstmal, das geht soweit. Sobald ich aber statt strcmp die Rückgabe eines weiteren Aufrufs von create_function nehme, kriege ich bei PHP 5.2.17 das hier:
Code:
Parse error: syntax error, unexpected '}' in /homepages/27/d342756222/htdocs/nspz/public/test.php(6) : runtime-created function on line 1

Fatal error: Function name must be a string in /homepages/27/d342756222/htdocs/nspz/public/test.php on line 7
sowie bei PHP 5.4 das:
Code:
Warning: Unexpected character in input: ' in C:\Users\Take\Homepage\spielmannszug\public\test.php(6) : runtime-created function on line 1

Fatal error: Call to undefined function lambda_790() in C:\Users\Take\Homepage\spielmannszug\public\test.php(6) : runtime-created function on line 1
Das ist ja mein eigentliches Problem. Wenn ich in meinem Code oben folgende Zeile
PHP-Code:
$sort_function create_function('$elem1, $elem2''return $elem1 - $elem2;'); 
durch diese ersetze:
PHP-Code:
$sort_function 'strcmp'
läuft der Code auch auf PHP 5.2.17. Ich kann innerhalb einer "runtime-created function" keine andere "runtime-created function" aufrufen...

gruß,
take
Mit Zitat antworten
  #8 (permalink)  
Alt 24.06.2012, 13:50
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Hm, dann verstehe ich leider nicht, was du genau erreichen möchtest.
Mit Zitat antworten
  #9 (permalink)  
Alt 24.06.2012, 13:55
body.ie {display: grotte}
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 09.01.2011
Beiträge: 841
take_a_7 sorgt für eine eindrucksvolle Atmosphäretake_a_7 sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

Zitat:
Zitat von mermshaus Beitrag anzeigen
Hm, dann verstehe ich leider nicht, was du genau erreichen möchtest.
Ich habe eine Benutzerdefinierte Sortierfunktion (liegt als String vor, dieser kann entweder die Rückgabe eines Aufrufs von create_function sein, oder aber auch z.B. strcmp). Daraus will ich eine Funktion erstellen (mit create_function), die ich der Funktion usort übergeben kann, damit diese das Array nach dem gewünschten Unter-Schlüssel mit der Benutzerdefinierten Sortierfunktion sortiert. Was ich möchte ist eine Funktion wie diese:
PHP-Code:
function sort_array_by_key_with_custom_function(&$array$key$sort_function) {
    
usort($arraycreate_function('$elem1, $elem2''return '.$sort_function.'($elem1[\''.$key.'\'], $elem2[\''.$key.'\']);'));

gruß,
take
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 24.06.2012, 14:27
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Okay, ich glaube, ich habe es jetzt begriffen.

Siehe dazu diese beiden Bugreports:

- https://bugs.php.net/bug.php?id=37016
- https://bugs.php.net/bug.php?id=40160

Vielleicht geht das:

PHP-Code:
<?php

function sortByKey($data$key$sortFunc)
{
    
// PHP kann deklarierte Funktionen nicht wieder aus dem Speicher entfernen.
    // Um zu verhindern, dass dieselbe Callback-Funktion bei wiederholtem Aufruf
    // dieser Funktion mit gleichem Key wieder neu generiert wird, wird die
    // Callback-Funktion für jeden Key zwischengespeichert
    
static $cache = array();

    
// NUL-Byte vom Beginn rauskicken
    
$sortFunc substr($sortFunc1);

    
$combinedKey $key ' ' $sortFunc;

    if (!
array_key_exists($combinedKey$cache)) {
        
$cache[$combinedKey] = create_function(
            
'$a, $b',
            
sprintf(
                
'$f = "\0%s"; return $f($a["%s"], $b["%s"]);',
                
$sortFunc,
                
$key,
                
$key
            
)
        );
    }

    
usort($data$cache[$combinedKey]);

    return 
$data;
}

$data = array();
$data[] = array('blub' => 'a''irgendwas' => 'anderes');
$data[] = array('blub' => 'c''nochwas' => 'anderes');
$data[] = array('blub' => 'b''foo' => 'bar');

$myFunc create_function(
    
'$a, $b',
    
'return (-1) * strcmp($a, $b);'
);

var_dump(sortByKey($data'blub'$myFunc));
Ich bin mir nicht sicher, dass ich das erklären kann.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php Seiten online stellen online Serveradministration und serverseitige Scripte 7 27.03.2009 13:13
Praxisnah PHP lernen p0mmeluff Serveradministration und serverseitige Scripte 5 24.03.2009 22:18
Fehlermeldung: "No input file specified" nach php weiterleitung nevermind Serveradministration und serverseitige Scripte 2 19.09.2008 11:27
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
Input Type hidden eigenen Style definieren. Wie? dabjoern CSS 4 09.07.2005 11:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:57 Uhr.