スクリプトを実行すると、次のエラーが表示されます。エラーメッセージは次のとおりです...
警告:file_get_contents()[function.file-get-contents]:https://ラッパーは、サーバー構成で/home/satoship/public_html/connect.phpの22行目でallow_url_fopen = 0によって無効になっています
これはサーバーの問題であることは知っていますが、上記の警告を取り除くためにサーバーに何をする必要がありますか?
Php.iniファイルを変更する機能がない場合は、cURLを使用します。 PHP Curl And Cookies
これが私が作成した関数の例です:
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;
}
注:この機能を再検討すると、このコードでSSLチェックを無効にしていることに気付きました。私の特定の場合、それを使用していたサイトはローカルで安全でしたが、それは一般に悪いことです。その結果、デフォルトでSSLチェックをオンにするようにこのコードを変更しました。何らかの理由でそれを変更する必要がある場合は、CURLOPT_SSL_VERIFYPEERの値を単に更新できますが、誰かがこれを使用する場合はデフォルトでコードを安全にしたかったのです。
@blytungには、その関数を置き換える素敵な関数があります
<?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;
?>
PHPスクリプトでこのコードを使用します(最初の行)
ini_set('allow_url_fopen',1);
Php.iniを編集し、allow_url_fopenを見つけてallow_url_fopen = 1に設定します
絶対ファイルパスの代わりにrelativeを使用すると、問題が解決しました。同じ問題が発生し、allow_url_fopen=on
助けにはならなかった。これは、たとえば次のことを意味します。
つかいます $file="folder/file.ext";
の代わりに $file="https://website.com/folder/file.ext";
in
$f=fopen($file,"r+");