Versio

PHP filter probleem met FILTER_CALLBACK

Overzicht Reageren

Joren de Wit
Beheerder

Joren de Wit

06/12/2007 14:20:00
Quote Anchor link
Vrienden,

Ik loop tegen een probleem aan waarbij Apache vastloopt bij een bepaald script waarin ik gebruik maak de FILTER_CALLBACK filter in PHP. Nu vraag ik mij af of dit enkel bij mij lokaal het geval is, of dat jullie diezelfde fout kunnen reproduceren. Let wel: Apache loopt bij mij vast, dus probeer het eerst op een lokale testserver.

De code die ik gebruik is de volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function check ($string)
{

    if(strlen($string) > 4)
    {

        return $string;
    }

    return false;
}


$var = 'testing';
$result = filter_var($var, FILTER_CALLBACK, array('options' => 'check'));
var_dump($result);
?>

Nu levert dit in eerste instantie bij mij geen probleem op. En de output is dan ook netjes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
string(7) "testing"

Echter zodra ik een waarde voor $var invul waarbij check() false zou retourneren (vb. $var = 'test') dan loopt apache vast en moet ik de server opnieuw opstarten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// Apache loopt vast bij deze code...
function check ($string)
{

    if(strlen($string) > 4)
    {

        return $string;
    }

    return false;
}


$var = 'test';
$result = filter_var($var, FILTER_CALLBACK, array('options' => 'check'));
var_dump($result);
?>

Dit probleem lijkt zich dus alleen voor te doen als de callback functie false retourneert. Het vreemde is dat als ik de callback functie als methode van een klasse aanroep, er geen probleem is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class MyClass
{
    function
check ($string)
    {

        if(strlen($string) > 4)
        {

            return $string;
        }

        return false;
    }
}


$var = 'test';
$result = filter_var($var, FILTER_CALLBACK, array('options' => array('MyClass', 'check')));
var_dump($result); // Output: bool(false)
?>

De output is nu zoals je zou verwachten inderdaad false.

Niet onbelangrijk om te vermelden wat ik hier lokaal draai en welke versies ik geprobeerd heb:

WAMP2.0 (Standaard installatie)
Apache v2.2.6 en v2.2.2
PHP v5.2.5 en v5.2.1

Ik ben benieuwd of dit een bug in PHP is of dat het aan mijn lokale installatie ligt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
PHP hulp

PHP hulp

25/05/2012 10:23:42
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Joren de Wit
Beheerder

Joren de Wit

07/12/2007 21:51:00
Quote Anchor link
Bumpje...
 
Joren de Wit
Beheerder

Joren de Wit

08/12/2007 21:17:00
Quote Anchor link
Nog maar een bump dan. Iemand die dit even kan proberen?
 
Wouter K

Wouter K

10/12/2007 14:39:00
Quote Anchor link
zal even de zielepoot die wel wat aandacht mag krijgen een bump geven


;p ;p ;p
 
Joren de Wit
Beheerder

Joren de Wit

10/12/2007 15:19:00
Quote Anchor link
Ik ben zelf ook nog even op onderzoek uitgegaan, en kan nu wel concluderen dat dit gewoon een bug in PHP is. Met elke configuratie die ik tot nu toe geporbeerd heb, liep apache vast...

Als iemand dit wel werkend krijgt, laat het me dan weten. Ik ben zeer benieuwd welke configuratie je dan gebruikt.
 
Karl Karl

Karl Karl

02/01/2008 17:25:00
Quote Anchor link
Zelfde fout bij mij. Apache probeert geen data (null) naar het geheugenadres 00000000 te schrijven, maar dat mag niet omdat dat gereseveert is:
Why does Software Crash #1 – The Access Violation.
Met google kan ik er niks over vinden (op dat geheugenadres):
apache 0x009d8d20.
 
Frank -

Frank -

02/01/2008 17:42:00
Quote Anchor link
Yep, hier op OSX loopt de boel ook volledig in het honderd.
 
PHP Newbie

PHP Newbie

02/01/2008 18:04:00
Quote Anchor link
Krijg bij mijn host gewoon wit scherm...
 
Arend a

Arend a

02/01/2008 18:09:00
Quote Anchor link
Heb je iets van een foutmelding in een error log? Een segmentation fault ofzo?
 
Joren de Wit
Beheerder

Joren de Wit

02/01/2008 18:13:00
Quote Anchor link
Arend schreef op 02.01.2008 18:09:
Heb je iets van een foutmelding in een error log? Een segmentation fault ofzo?
Was die vraag voor mij bedoeld?

ik welke error log zou ik moeten kijken? Apache schrijft in ieder geval niets naar zijn eigen log, hij kapt er gewoon mee...
 
Arend a

Arend a

02/01/2008 18:19:00
Quote Anchor link
Onder debian stable heb ik geen problemen.

Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch7 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8
 
Karl Karl

Karl Karl

02/01/2008 18:43:00
Quote Anchor link
Arend schreef op 02.01.2008 18:19:
Onder debian stable heb ik geen problemen.

Maar debian heeft toch ook niet in de eerste zoveel mb van het geheugen gereseveert? Dat heeft windows namelijk wel, en die vind het niet zo fijn als je daar mee gaat kloten.
 
- SanThe -

- SanThe -

02/01/2008 18:50:00
Quote Anchor link
[Wed Jan 2 18:48:24 2008] [error] PHP Fatal error: Call to undefined function filter_var() in /htdocs/test/test.php on line 15
 
Joren de Wit
Beheerder

Joren de Wit

02/01/2008 18:53:00
Quote Anchor link
PHP 5? Filters zijn dan pas namelijk beschikbaar ;-)
 
- SanThe -

- SanThe -

02/01/2008 18:55:00
Quote Anchor link
PHP Version 5.0.4
 
Joren de Wit
Beheerder

Joren de Wit

02/01/2008 18:58:00
Quote Anchor link
Quote:
filter_var (PHP 5 >= 5.2.0)
;-)
 
Jelmer rrrr

Jelmer rrrr

02/01/2008 19:54:00
Quote Anchor link
Ik draai hem even vanuit Textmate (dus eigenlijk gewoon vanaf de commandline) en inderdaad, PHP stopt er gewoon mee.

Een workaround is om in plaats van 'false' bijvoorbeeld NULL, of 0 te hanteren. Dezen werken wel als ik ze probeer, en bij een if-statement zijn ze gelijk aan false. Daarnaast, NULL zal je waarschijnlijk niet snel tegenkomen op de plekken waar je filter_* gebruikt. Die zou je dus wel kunnen gebruiken. Vervelend blijft het natuurlijk wel.
 
PHP Newbie

PHP Newbie

03/01/2008 21:40:00
Quote Anchor link
Wanneer ik hem naar een windows hosting gooi krijg ik:

PHP has encountered an Access Violation at 0259A550
 
Joren de Wit
Beheerder

Joren de Wit

03/01/2008 21:43:00
Quote Anchor link
Dan ligt het blijkbaar aan de omgeving waarin je het probeert uit te voeren. Vooralsnog leveren Windows en Mac OSX dus problemen op...
 
Martijn B

Martijn B

03/01/2008 21:58:00
Quote Anchor link
Op Ubuntu 7/PHP 5.2.5/Apache2.2.4

Krijg ik een wit scherm.

Apache loopt niet vast.

Ik krijg wel dit in de Apache error log:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[Thu Jan 03 21:52:29 2008] [notice] child pid 18454 exit signal Segmentation fault (11)


Heeft dus zijn kindje vermoord ;(
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 



Overzicht Reageren