web-dev-qa-db-fra.com

Configuration du serveur par allow_url_fopen = 0 in

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?

14
JohnThomas

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.

16
Doug

@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;
?>    
19
cMinor

Utilisez ce code dans votre script php (premières lignes)

ini_set('allow_url_fopen',1);
8
Ahmad

Modifiez votre php.ini, recherchez allow_url_fopen et définissez-le sur allow_url_fopen = 1

6
AndiPower

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+");
0
François Roduit