Ik werk al 5 jaar met een script dat data ophaalt uit een site en vervolgens wegschrijft in een txt-file waarna er een grafiek van wordt getekend. Ik krijg opeens foutmeldingen in een error-file die binnen een dag volloopt tot 10GB (m'n maximale ruimte). De foutmelding die ik krijg geldt voor zowel feof (lijn 3) als fgets (lijn 4).
PHP-warning feof() expects parameter to be resource, boolean given in ....grafiek.inc.php line 24 en:
PHP-warning fgets() expects parameter to be resource, boolean given in ....grafiek.inc.php line 26.
Ik heb al gekeken of de data wel aanwezig is op de site en die is er. Ik heb ook al geprobeerd ofeen @ voor fopen het probleem oplost maar dat lukt niet. De php-versie die momenteel draait is 5.6.

<?php
$htmlfile = fopen("https://gadgets.buienradar.nl/data/raintext?lat=52.8836&lon=6.9023","r");
$file_handle = fopen("neerslag.txt", "w");
while(![b]feof[/b]($htmlfile)){

$file_contents = [b]fgets[/b]($htmlfile);
fwrite( $file_handle, $file_contents);
}
fclose($htmlfile);
fclose($file_handle);
?>

Er is een php.ini instelling allow_url_fopen. Mogelijk is deze door je provider uit gezet? Makkelijkste manier om er achter te komen is even

<?php
phpinfo();
?>


in een tijdelijk script te zetten, en kijken of deze setting "On" of "Off" is
** quoteknip **

Die staat zowel voor local als master op off. Kan ik dat omzeilen?
Hoogstens via php.ini. Of je daar bij kan, is de vraag.
misschien mbv curl() ?


<?php
$url = "https://gadgets.buienradar.nl/data/raintext?lat=52.8836&lon=6.9023";
$ch = curl_init();
	$timeout = 5;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$file_contents = curl_exec($ch);
	curl_close($ch);
?>
**quoteknip**

Ik heb er het volgende van gemaakt maar ook op deze manier blijft neerslag.txt leeg als wordt er wel naar het bestand geschreven als je de pagina oproept.

	vWritePageToFile( 'https://gadgets.buienradar.nl/data/raintext?lat=52.8836&lon=6.9023', 'neerslag.txt' );

    function vWritePageToFile( $sHTMLpage, $sTxtfile ) {
     $sh =          curl_init( $sHTMLpage );
     $hFile =                       FOpen( $sTxtfile, 'w' );
     curl_setopt( $sh, CURLOPT_FILE, $hFile );
     curl_setopt( $sh, CURLOPT_HEADER, 0 );
     curl_exec  ( $sh );
     curl_close(  $sh );
     FClose    (  $hFile );
    }


[modedit]
Het is niet nodig om steeds het eerste voorgaande bericht integraal te quoten. Dit zorgt ervoor dat het topic minder leesbaarder wordt. Daarom heb ik wat onnodige quotes weggesnoeid. Gelieve hier graag rekening mee te houden.
Waar heb je CURLOPT_RETURNTRANSFER dan gelaten?
Ik heb het eindelijk voor elkaar.


<?php 

$curl = curl_init('https://gadgets.buienradar.nl/data/raintext?lat=52.8836&lon=6.9023'); 
curl_setopt($curl, CURLOPT_FAILONERROR, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);   
$result = curl_exec($curl); 
$myFile = "neerslag.txt";
$fh = fopen($myFile, 'w') or die("kan file niet openen");
fwrite($fh, $result);
fclose($fh);

?>
Bijna, want het is eigenlijk niet de bedoeling om CURLOPT_SSL_VERIFYPEER op false te zetten. Lees hier waarom niet:

https://snippets.webaware.com.au/howto/stop-turning-off-curlopt_ssl_verifypeer-and-fix-your-php-config/

Voor Buienradar kan je een uitzondering maken, omdat het niet zo super spannende en cruciale data is. Maar als je het goed wilt doen, en je zou met belangrijke gegevens werken die over SSL gaan, dan zou ik CURLOPT_SSL_VERIFYPEER op false zeker afraden!

Ik meen dat je die CA's ook via curl kan aanroepen, dus je hoeft dan niet eens je php.ini aan te passen.
Ik vind het wel goed zo Ariën. Ik word binnenkort 72 en hoef niet meer zo scherp te zijn. Ik ben al blij dat ik het allemaal nog een klein beetje begrijp. :-)

Reageren