PHP break werkt niet bij nieuwe host

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G Jansma

G Jansma

13/05/2017 19:59:28
Quote Anchor link
Ik ben mijn website aan het overzetten naar een andere host, maar daar werkt de pagina niet meer door een 'break' in PHP. Ik heb als test even de volgende pagina gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$test
= "test";
echo $test;

if($test == "test") {echo "piet"; break;}

echo "jan";

?>


Bij mijn oude host krijg ik dan 'testpiet' als resultaat, maar bij mijn nieuwe host een witte pagina. De PHP-versie staat op 7.0. Enig idee of er een manier is om dat aan te zetten? Of zie ik iets over het hoofd?
 
PHP hulp

PHP hulp

03/12/2021 15:14:12
 
- Ariën -
Beheerder

- Ariën -

13/05/2017 20:17:45
Quote Anchor link
Zet in PHP 7 eens error reporting aan, en zie:

Fatal error: 'break' not in the 'loop' or 'switch' context in /bla/bla.php on line ...

Op voorgaande PHP versies werd de het script tot aan de break gewoon uitgevoerd, maar zag je normaal gesproken wel een warning daarna.

De vraag is echter.... Wat doet de break daar? Bedoel je geen exit of die() om het script te stoppen?
En om verder te borduren op je vraag: Waarom moet je script abrupt stoppen? Kan je dit niet netjes handlen met if-else statements?
 
- SanThe -

- SanThe -

13/05/2017 20:17:59
Quote Anchor link
Kijk in je errorlogfile.
Daar staat zoiets in:
PHP Fatal error: 'break' not in the 'loop' or 'switch' context in ........
 
G Jansma

G Jansma

13/05/2017 21:31:21
Quote Anchor link
Ik heb de error reporting aangezet. Bij mijn 'oude host' zegt hij dan 'Fatal error: Cannot break/continue 1 level in /bla/bla/test.php on line 13' maar bij mijn 'nieuwe host' krijg ik dan geen error, gewoon een compleet witte pagina. Als ik 'break' weghaal geeft hij wel de error dat de eerste $test undefined is, dus de error reporting doet het wel. Maar ik zie dat die oude host nog op 5.5.38 stond en de nieuwe op 7.0.18. Wat gaat er dan mis?

Tussen de pagina's die ik wil overzetten zitten wel een paar complexe scripts waar ik 'break' heb gebruikt. Ik zit er niet echt op te wachten dat ik die allemaal moet gaan wijzigen. Deze code is niet zozeer een concreet voorbeeld, maar puur om te testen of de pagina werkt.

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
<?php

ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

echo 'Current PHP version: ' . phpversion();

echo $test;
$test = "test";
echo $test;

if($test == "test") {echo "piet"; break;}

echo "jan";

?>
 
- Ariën -
Beheerder

- Ariën -

13/05/2017 21:37:44
Quote Anchor link
Maar waarom een 'break'?

G Jansma op 13/05/2017 21:31:21:
Ik zit er niet echt op te wachten dat ik die allemaal moet gaan wijzigen.

Ken je 'find & replace' al?
Gewijzigd op 13/05/2017 21:44:56 door - Ariën -
 
Ben van Velzen

Ben van Velzen

13/05/2017 21:45:27
Quote Anchor link
Wanneer je break correct gebruikt, dus in de situaties waar dat zou mogen geeft het geen problemen. Je probleem is dus per definitie dat je break niet correct gebruikt.
 
G Jansma

G Jansma

13/05/2017 21:50:33
Quote Anchor link
Ik heb een loop met daarin tien stappen per loop. Als de invoer aan de stap voldoet dan stopt die loop dmv de break. Dat kan dus bij de eerste stap zijn, bij de achtste of bij de tiende. Maar ze moeten wel allemaal doorlopen worden totdat het succesvol is. En het is lastig om het in if-else te gieten.

Edit: Maar zover ben ik nog niet gekomen om die betreffende pagina's te gaan checken. Dit scriptje leek me ook te moeten functioneren gezien het op mijn oude host (weliswaar 5.5) ook werkt. Maar is het dan een PHP 7.0 kwestie, of ligt het aan de host?
Gewijzigd op 13/05/2017 21:53:45 door G Jansma
 
- Ariën -
Beheerder

- Ariën -

13/05/2017 21:56:52
Quote Anchor link
In jouw test-script gebruik je 'break' verkeerd. Dát is de kwestie.
 
- SanThe -

- SanThe -

13/05/2017 22:01:42
Quote Anchor link
- Ariën - op 13/05/2017 21:56:52:
In jouw test-script gebruik je 'break' verkeerd. Dát is de kwestie.


Klopt.
Zo werkt het namelijk wel gewoon:
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

ini_set('display_errors',1);
error_reporting(E_ALL|E_STRICT);

echo 'Current PHP version: ' . phpversion();

echo $test;
$test = "test";
echo $test;

while(true)
{

if($test == "test") {echo "piet"; break;}
echo "jan";
}

?>
 
- Ariën -
Beheerder

- Ariën -

13/05/2017 22:07:38
Quote Anchor link
@SanThe: In PHP 7 wordt het hele script niet eens met uitgevoerd dan. Geloof ik...
 
Ben van Velzen

Ben van Velzen

13/05/2017 22:08:03
Quote Anchor link
>> Edit: Maar zover ben ik nog niet gekomen om die betreffende pagina's te gaan checken. Dit scriptje leek me ook te moeten functioneren gezien het op mijn oude host (weliswaar 5.5) ook werkt. Maar is het dan een PHP 7.0 kwestie, of ligt het aan de host?

Weet je dan wel zeker dat het probleem break is? Of zit je je blind te staren op iets anders, zoals het gebruik van de oude mysql extensie?

@Ariën dat geldt voor alle PHP versies vanaf 4.0.0.
Gewijzigd op 13/05/2017 22:08:41 door Ben van Velzen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.