J'obtiens l'erreur suivante lors de l'exécution d'un script. Le message d'erreur est le suivant ...
Avertissement: file_get_contents () [function.file-get-contents]: https: // le wrapper est désactivé dans la configuration du serveur par allow_url_fopen = 0 dans /home/satoship/public_html/connect.php sur la ligne 22
Je sais que c'est un problème de serveur mais que dois-je faire au serveur pour se débarrasser de l'avertissement ci-dessus?
Si vous n'avez pas la possibilité de modifier votre fichier php.ini, utilisez cURL: PHP Curl And Cookies
Voici un exemple de fonction que j'ai créée:
function get_web_page( $url, $cookiesIn = '' ){
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, //return headers in addition to content
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLINFO_HEADER_OUT => true,
CURLOPT_SSL_VERIFYPEER => true, // Validate SSL Cert
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_COOKIE => $cookiesIn
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$rough_content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header_content = substr($rough_content, 0, $header['header_size']);
$body_content = trim(str_replace($header_content, '', $rough_content));
$pattern = "#Set-Cookie:\\s+(?<cookie>[^=]+=[^;]+)#m";
preg_match_all($pattern, $header_content, $matches);
$cookiesOut = implode("; ", $matches['cookie']);
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['headers'] = $header_content;
$header['content'] = $body_content;
$header['cookies'] = $cookiesOut;
return $header;
}
REMARQUE: En revisitant cette fonction, j'ai remarqué que j'avais désactivé les vérifications SSL dans ce code. C'est généralement une mauvaise chose même si dans mon cas particulier le site sur lequel je l'utilisais était local et sûr. Par conséquent, j'ai modifié ce code pour que les vérifications SSL soient activées par défaut. Si pour une raison quelconque vous devez changer cela, vous pouvez simplement mettre à jour la valeur de CURLOPT_SSL_VERIFYPEER, mais je voulais que le code soit sécurisé par défaut si quelqu'un l'utilise.
@blytung A une fonction intéressante pour remplacer cette fonction
<?php
$url = "http://www.example.org/";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
if (curl_errno($ch)) {
echo curl_error($ch);
echo "\n<br />";
$contents = '';
} else {
curl_close($ch);
}
if (!is_string($contents) || !strlen($contents)) {
echo "Failed to get contents.";
$contents = '';
}
echo $contents;
?>
Utilisez ce code dans votre script php (premières lignes)
ini_set('allow_url_fopen',1);
Modifiez votre php.ini, recherchez allow_url_fopen et définissez-le sur allow_url_fopen = 1
L'utilisation de relative au lieu du chemin de fichier absolu a résolu le problème pour moi. J'ai eu le même problème et la configuration allow_url_fopen=on
n'a pas aidé. Cela signifie par exemple:
utilisation $file="folder/file.ext";
au lieu de $file="https://website.com/folder/file.ext";
dans
$f=fopen($file,"r+");