Php7 platform overgezet
Pagina: 1 2 3 4 5 6 volgende »
13-7-2018
Beste phpHelpdeskers,
Ik ben klant van Mijndomein. Mijndomein heeft een aantal dagen geleden mijn website rspp.nl overgezet naar een nieuw platform php vs 7.1. Mijn phpscripts ondersteunen dat nog niet. Er is een mogelijkheid bij Mijndomein om het platform terug te zetten naar vs 5.6, wat ik ook heb gedaan. Begin 2019 komt PHP 5.6 te vervallen.
Wat ik nu niet begrijp is dat ik ineens die foutmelding(en) krijg ná het vernieuwen van het platform. Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.
Sinds het nieuwe platform er is, stonden er drie fouten op mijn website die inmiddels zijn opgelost. Daarna kreeg stond er weer eentje welke ik niet kan oplossen.
•Notice: Undefined variable: weg in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 336
Het betreft een voorwaardelijke uitdrukking if ($weg == 0)
Is hier een andere vergelijking voor in php5.6?
Misschien dat u mij hierbij verder kan helpen? Alvast hartelijk bedankt.
Met vriendelijke groet,
Margot Schuitemaker
Beste phpHelpdeskers,
Ik ben klant van Mijndomein. Mijndomein heeft een aantal dagen geleden mijn website rspp.nl overgezet naar een nieuw platform php vs 7.1. Mijn phpscripts ondersteunen dat nog niet. Er is een mogelijkheid bij Mijndomein om het platform terug te zetten naar vs 5.6, wat ik ook heb gedaan. Begin 2019 komt PHP 5.6 te vervallen.
Wat ik nu niet begrijp is dat ik ineens die foutmelding(en) krijg ná het vernieuwen van het platform. Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.
Sinds het nieuwe platform er is, stonden er drie fouten op mijn website die inmiddels zijn opgelost. Daarna kreeg stond er weer eentje welke ik niet kan oplossen.
•Notice: Undefined variable: weg in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 336
Het betreft een voorwaardelijke uitdrukking if ($weg == 0)
Is hier een andere vergelijking voor in php5.6?
Misschien dat u mij hierbij verder kan helpen? Alvast hartelijk bedankt.
Met vriendelijke groet,
Margot Schuitemaker
Je variabele $weg bestaat dus (soms) niet.
Vraag je eerst af waarom dat voor kan komen.
Je kunt het oplossen met
Maar vraag je toch af, hoe $weg niet kan bestaan. Waar zou die vandaan moeten komen?
Vraag je eerst af waarom dat voor kan komen.
Je kunt het oplossen met
Maar vraag je toch af, hoe $weg niet kan bestaan. Waar zou die vandaan moeten komen?
Zoals Ivo al duidelijk probeert te maken: er zit een fout in je code. Voorheen zag je die niet, omdat PHP daar "niet moeilijk over deed" (on the fly gewoon een variabele aanmaakte). Waarschijnlijk staat het "error reporting" niveau in de nieuwe omgeving "strakker", waardoor het probleem nu wel gemeld wordt.
Je kunt de oude situatie "herstellen" door de "Notice" meldingen nog steeds niet te tonen. Dit kan door onderstaand stukje code boven in je script op te nemen (hiermee sluit je de notices van het rapporteren):
Maar nogmaals: dit is geen echte oplossing (gewoon je ogen dicht doen zodat je het probleem niet meer ziet). De echte oplossing is uitzoeken waarom die $weg (soms) niet bestaat, en het dan fixen. Ik vermoed dat er zoiets gebeurt:
Als er nu geen $_POST is, dan wordt $weg nooit ingesteld, en krijg je de Notice (en als er wel een $_POST is -> geen melding).
Dit is dan eenvoudig op te lossen:
Je kunt de oude situatie "herstellen" door de "Notice" meldingen nog steeds niet te tonen. Dit kan door onderstaand stukje code boven in je script op te nemen (hiermee sluit je de notices van het rapporteren):
Maar nogmaals: dit is geen echte oplossing (gewoon je ogen dicht doen zodat je het probleem niet meer ziet). De echte oplossing is uitzoeken waarom die $weg (soms) niet bestaat, en het dan fixen. Ik vermoed dat er zoiets gebeurt:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
if($_POST){
//doe iets
$weg = 5; //of zoiets
}
//meer code
if ($weg == 0){
//enz
}
//doe iets
$weg = 5; //of zoiets
}
//meer code
if ($weg == 0){
//enz
}
Als er nu geen $_POST is, dan wordt $weg nooit ingesteld, en krijg je de Notice (en als er wel een $_POST is -> geen melding).
Dit is dan eenvoudig op te lossen:
Gewijzigd op 13/07/2018 22:31:21 door Rob Doemaarwat
Hallo Ivo,
In 2008 is de webshop door mijn (coach)collega en mij. Telkens wanneer er een migratie is bij mijndomein moet ik mij erin verdiepen, daar de coach uit zicht is. Het lukt mij telkens wel om de website online te houden, ik zou mij moeten verdiepen in jouw vraag.
Bedankt voor je snelle reactie. Ik las er net over in het digitale phpboek en was aan het expirimenteren hoe:)
Het werkt! Ik zal bij een andere pagina nog twee fouten:
Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 94
list($$aantalitems) = $row;
Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 95
return $aantalitems;
Misschien zou je mij nog eens willen helpen?
In 2008 is de webshop door mijn (coach)collega en mij. Telkens wanneer er een migratie is bij mijndomein moet ik mij erin verdiepen, daar de coach uit zicht is. Het lukt mij telkens wel om de website online te houden, ik zou mij moeten verdiepen in jouw vraag.
Bedankt voor je snelle reactie. Ik las er net over in het digitale phpboek en was aan het expirimenteren hoe:)
Het werkt! Ik zal bij een andere pagina nog twee fouten:
Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 94
list($$aantalitems) = $row;
Notice: Undefined variable: aantalitems in /home/public/sites/www.rspp.nl/library/puchfunctions.php on line 95
return $aantalitems;
Misschien zou je mij nog eens willen helpen?
Wat staat er rond die lijn 94?
Dank je wel! Ik ga ermee aan de slag.
Hartelijke groet, Margot
Toevoeging op 13/07/2018 22:53:44:
function itemsperpagina($categorie) {
//deze functie berekent het aantal items per pagina, of eigenlijk per categorie
//invoer: $categorie, een string met de waarden 'frame', 'wiel', of 'motor'
//uitvoer: het aantal items
$query="select count(art_id) as aantal from artikel where cat_naam='".$categorie."'";
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);
line 94: list($$aantalitems) = $row;
line 95: return $aantalitems;
}
Hartelijke groet, Margot
Toevoeging op 13/07/2018 22:53:44:
function itemsperpagina($categorie) {
//deze functie berekent het aantal items per pagina, of eigenlijk per categorie
//invoer: $categorie, een string met de waarden 'frame', 'wiel', of 'motor'
//uitvoer: het aantal items
$query="select count(art_id) as aantal from artikel where cat_naam='".$categorie."'";
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);
line 94: list($$aantalitems) = $row;
line 95: return $aantalitems;
}
In PHP7 werken de mysql_***() functies ook niet meer. Ikzelf raad MySQLi aan als functiebibliotheek.
Omdat $row geen array bevat omdat de functie erin niet meer bestaat, zal je met list() in deze situatie niet de gewenste uitvoer krijgen.
Omdat $row geen array bevat omdat de functie erin niet meer bestaat, zal je met list() in deze situatie niet de gewenste uitvoer krijgen.
Gewijzigd op 13/07/2018 22:57:52 door - Ariën -
Is er niet een tijdelijke oplossing voor?
Voor het 'mooie' heb ik tijdelijk onderstaand statement van jou bovenin de pagina gezet error_reporting(error_reporting() & ~E_NOTICE);
Ga dat verder uitzoeken.
Moet ik alle scripts wijzigen in mysqli betreffende php7? Ik ga voor info ook naar w3schools en http://www.phpboek.net. Wat zou ik moeten doen om mijn webshop/site in php7 werkbaar te maken? Is er een goede website voor php7 info of is er een goed leesbaar boek in omloop. Misschien dat jij/jullie dat weten?
Enorm bedankt, Margot
Voor het 'mooie' heb ik tijdelijk onderstaand statement van jou bovenin de pagina gezet error_reporting(error_reporting() & ~E_NOTICE);
Ga dat verder uitzoeken.
Moet ik alle scripts wijzigen in mysqli betreffende php7? Ik ga voor info ook naar w3schools en http://www.phpboek.net. Wat zou ik moeten doen om mijn webshop/site in php7 werkbaar te maken? Is er een goede website voor php7 info of is er een goed leesbaar boek in omloop. Misschien dat jij/jullie dat weten?
Enorm bedankt, Margot
Alle wijzigingen tussen de PHP-versies kan je hier vinden:
PHP 5.4-> 5.5
http://php.net/manual/en/migration55.php
PHP 5.5-> 5.6
http://php.net/manual/en/migration56.php
PHP 5.6-> 7.0
http://php.net/manual/en/migration70.php
PHP 7.0-> 7.1
http://php.net/manual/en/migration71.php
PHP 7.1-> 7.2
http://php.net/manual/en/migration72.php
Maar je zult voor PHP 7 écht de oude mysql_***() functies uit je code moeten ombouwen naar MySQLi-functies (aanrader!) of PDO.
PHP 5.4-> 5.5
http://php.net/manual/en/migration55.php
PHP 5.5-> 5.6
http://php.net/manual/en/migration56.php
PHP 5.6-> 7.0
http://php.net/manual/en/migration70.php
PHP 7.0-> 7.1
http://php.net/manual/en/migration71.php
PHP 7.1-> 7.2
http://php.net/manual/en/migration72.php
Maar je zult voor PHP 7 écht de oude mysql_***() functies uit je code moeten ombouwen naar MySQLi-functies (aanrader!) of PDO.
Ik zie nu al 3x $$aantalitems staan (met twee dollar tekens), dus ik vermoed dat het langzamerhand geen typefout meer is. Wat je hier doet is een variabele "aanroepen" met de naam $aantalitems. En die is inderdaad nog niet bekend. Als je er gewoon een enkel dollar teken van maakt werkt het volgens mij weer (maar dit zou in het verleden ook nooit hebben kunnen werken - alleen zag je de foutmelding niet). Dus:
(o, keek net op de site; heb zelf een MV50 gehad - dat was even een trip down memory lane, vooral qua dagenlang sleutelwerk, en alles wat er stuk kon gaan aan dat ding ...).
(o, keek net op de site; heb zelf een MV50 gehad - dat was even een trip down memory lane, vooral qua dagenlang sleutelwerk, en alles wat er stuk kon gaan aan dat ding ...).
Quote:
Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.
Quote:
In 2008 is de webshop door mijn (coach)collega en mij.
Ook software is aan slijtage onderhevig. Een gezonde taal verandert over tijd. Oude dingen gaan eruit en er komen andere/betere onderdelen voor in de plaats. Je hebt dus een (homegrown?) webshop die ergens in 2008 is ontstaan/geschreven en daarna bij tijd en wijlen is bijgespijkerd? Misschien wordt het dan eens tijd om alle code op de schop te gooien, want als ik dit soort dingen zie:
Quote:
$query="select count(art_id) as aantal from artikel where cat_naam='".$categorie."'";
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);
$result = mysql_query($query) or die($query.' Error, query failed. ' . mysql_error());
$row = mysql_fetch_array($result);
Stemt mij dat niet erg gerust.
Security is tegenwoordig een ding (en is het altijd wel geweest eigenlijk). Ik weet niet in hoeverre de website/webshop onderdeel uitmaakt van de bedrijfsvoering (kun je via deze site ook echt dingen kopen? en zonee, wellicht het overwegen waard met een betaalkoppeling?), maar het lijkt mij zaak dat dit soort dingen goed geregeld zijn. Ook is er tegenwoordig zoiets als de Algemene Verordening Gegevensbescherming (AVG), dit houdt o.a. in dat wanneer iemand iets via een site m.b.t. persoonsgegevens regelt dit aan bepaalde spelregels is onderworpen. Tegenwoordig zou ik bij een webshop op zijn minst een beveiligde site (verbinding via https) verwachten.
+1. En zeker sinds er een meldplicht is voor datalekken die je had (moeten) weten ben je met dit soort constructies heel erg de sjaak.
Dit soort code schreeuwt bij mij om een audit. Heb je hier ooit een externe partij op los gelaten? Er zijn er genoeg die gewoon met een bot je site doornemen en dit soort lekken heel eenvoudig boven water krijgen. Zeker als de code deel is van je bedrijfsvoering is het vandaag de dag een must. Relatief gezien is het niet duur, zeker niet als je bedenkt hoe duur claims kunnen worden.
Dit soort code schreeuwt bij mij om een audit. Heb je hier ooit een externe partij op los gelaten? Er zijn er genoeg die gewoon met een bot je site doornemen en dit soort lekken heel eenvoudig boven water krijgen. Zeker als de code deel is van je bedrijfsvoering is het vandaag de dag een must. Relatief gezien is het niet duur, zeker niet als je bedenkt hoe duur claims kunnen worden.
Hartelijk bedankt voor jullie informatie.
Groet, Margot
Groet, Margot
Ik raad aan om eerst maar even SSL aan te zetten. het hoeft bij je provider vast niet lastig te zijn als ze Let's Encrypt gebruiken.
Hoi Ariën, bij mijndomein heb je een ssl-instellingenknop welke ik heb 'aangezet'. Op dit moment wordt mijn aanvraag verwerkt.
https://www.rspp.nl/ werkt inderdaad.
Je moet er nu alleen nog met .htaccess voor zorgen dat je alles van http doorsluist naar https.
Je moet er nu alleen nog met .htaccess voor zorgen dat je alles van http doorsluist naar https.
Code (php)
1
2
3
2
3
# Stuur alle onveilige http-verzoeken door naar https...
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Gewijzigd op 16/07/2018 22:35:12 door - Ariën -
Ik heb je code in .htaccess gezet en kreeg onderstaande melding:
De pagina verwijst niet op een juiste manier door
Fout tijdens het verbinden met rspp.nl.
Dit probleem kan soms worden veroorzaakt door het uitschakelen of weigeren van cookies.
Ik heb het weer teruggezet.
Ik vind het echt geweldig van je om telkens direct te reageren.
Toevoeging op 16/07/2018 23:01:45:
De ssl-aanvraag is nog aan het verwerken in mijndomein. Wanneer gereed, krijg ik misschien een optie(s) van doorverwijzen oid
De pagina verwijst niet op een juiste manier door
Fout tijdens het verbinden met rspp.nl.
Dit probleem kan soms worden veroorzaakt door het uitschakelen of weigeren van cookies.
Ik heb het weer teruggezet.
Ik vind het echt geweldig van je om telkens direct te reageren.
Toevoeging op 16/07/2018 23:01:45:
De ssl-aanvraag is nog aan het verwerken in mijndomein. Wanneer gereed, krijg ik misschien een optie(s) van doorverwijzen oid
Gebruik je subdomeinen of iets dergelijks? Want ik heb geen problemen met deze vorm van redirect. Maar misschien wordt er uiteindelijk wel HSTS gebruikt, en dan zou het automatisch kunnen gaan.
Gewijzigd op 16/07/2018 23:15:03 door - Ariën -
Nee, heb geen subdomeinen.
Hieronder staat wat mijndomein op hun site hebben staan ivm ssl:
SL Doorverwijzen
Zodra het certificaat actief is kan je de bezoekers van je website doorverwijzen naar de HTTPS versie van je website. Hiervoor krijg je de volgende opties te zien:
Zowel http als https
Met deze optie is je website via zowel HTTP:// als HTTPS:// bereikbaar. Het is aan de bezoeker welke versie er gebruikt wordt. Je website kan de bezoeker desgewenst alsnog doorsturen naar HTTPS
Stuur http door naar https
Met deze optie wordt de bezoeker door onze servers naar de HTTPS versie van je website gestuurd. Er wordt geen HSTS toegepast, dit kan je desgewenst zelf instellen.
Hieronder staat wat mijndomein op hun site hebben staan ivm ssl:
SL Doorverwijzen
Zodra het certificaat actief is kan je de bezoekers van je website doorverwijzen naar de HTTPS versie van je website. Hiervoor krijg je de volgende opties te zien:
Zowel http als https
Met deze optie is je website via zowel HTTP:// als HTTPS:// bereikbaar. Het is aan de bezoeker welke versie er gebruikt wordt. Je website kan de bezoeker desgewenst alsnog doorsturen naar HTTPS
Stuur http door naar https
Met deze optie wordt de bezoeker door onze servers naar de HTTPS versie van je website gestuurd. Er wordt geen HSTS toegepast, dit kan je desgewenst zelf instellen.
'Stuur http door naar https' is de beste oplossing. Dan wordt alles doorgestuurd naar https, en hoef je zelf geen extra aanpassingen te doen.
Voor wat betreft de mysqli_* functies kun je ook de "quick & dirty" methode hanteren:
- plaats dit https://raw.githubusercontent.com/dshafik/php7-mysql-shim/master/lib/mysql.php bestand bij je PHP bestanden.
- include het voordat je een mysql_connect() doet.
- klaar, alles werkt weer onder PHP 7!
Overpeinzingen:
- het is niet de meest "professionele", en meeste efficiënte oplossing (alle calls moeten via deze "shim" = extra code+tijd).
- de problemen met SQL-injectie blijven gewoon bestaan.
- je bent wel heel snel klaar (ik heb op deze manier probleemloos bakken aan legacy code "mee" gekregen naar PHP 7; moet allemaal nog een keer uitgefaseerd worden, maar "nu even niet").
- plaats dit https://raw.githubusercontent.com/dshafik/php7-mysql-shim/master/lib/mysql.php bestand bij je PHP bestanden.
- include het voordat je een mysql_connect() doet.
- klaar, alles werkt weer onder PHP 7!
Overpeinzingen:
- het is niet de meest "professionele", en meeste efficiënte oplossing (alle calls moeten via deze "shim" = extra code+tijd).
- de problemen met SQL-injectie blijven gewoon bestaan.
- je bent wel heel snel klaar (ik heb op deze manier probleemloos bakken aan legacy code "mee" gekregen naar PHP 7; moet allemaal nog een keer uitgefaseerd worden, maar "nu even niet").




