ホームページ  >  記事  >  バックエンド開発  >  phpカールプロンプト警告:curl_setopt() [function.curl-setopt]:CURLOPT_FOLLOWLOCATIONをアクティブ化できません...エラー解決策

phpカールプロンプト警告:curl_setopt() [function.curl-setopt]:CURLOPT_FOLLOWLOCATIONをアクティブ化できません...エラー解決策

ringa_lee
ringa_leeオリジナル
2018-05-14 13:37:206780ブラウズ


PHP のcurl 関数を使用すると、警告:curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION は、safe_mode または open_basedir が設定されている場合はアクティブにできません… というメッセージが表示されます。以下に、この問題のトラブルシューティング方法を紹介します。

php で CURLOPT_FOLLOWLOCATION を実行し、php プロンプト エラー メッセージが表示された場合:
警告:curl_setopt() [function.curl-setopt]:safe_mode または open_basedir が設定されている場合、CURLOPT_FOLLOWLOCATION をアクティブ化できません&hellip ;

エラーには、safe_mode と open_basedir という 2 つの重要な点が記載されています。仮想ホストで APPCHE を設定する権限がない場合、サーバー構成を変更しても問題を解決できません。

一般的に。つまり、サーバー設定のsafe_modeはすべてオフになっており、open_basedirを設定して仮想ホストユーザーのPHP実行フォルダーを制限することで、セキュリティのためにユーザーにいくつかの制限がかかります。 したがって、CURLOPT_FOLLOWLOCATION( phpカール関数、ディープクローリングデータ)、301リダイレクトが発生すると、記事に記載されているエラーメッセージが表示されます

関連情報を確認した後、すぐに解決策を見つけました

。具体的な方法は、curl ステートメントを使用します。curl_exec 関数を使用するかどうかを指定します。

curl_exec 関数をカスタマイズします。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

function curlExec(/* Array */$curlOptions='', /* Array */$curlHeaders='', /* Array */$postFields='')
{
  $newUrl = '';
  $maxRedirection = 10;
  do
  {
    if ($maxRedirection<1) die(&#39;Error: reached the limit of redirections&#39;);

    $ch = curl_init();
    if (!empty($curlOptions)) curl_setopt_array($ch, $curlOptions);
    if (!empty($curlHeaders)) curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders);
    if (!empty($postFields))
    {
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    }
    
    if (!empty($newUrl)) curl_setopt($ch, CURLOPT_URL, $newUrl); // redirect needed
    
    $curlResult = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    if ($code == 301 || $code == 302 || $code == 303 || $code == 307)
    {
      preg_match(&#39;/Location:(.*?)\n/i&#39;, $curlResult, $matches);
      $newUrl = trim(array_pop($matches));
      curl_close($ch);

      $maxRedirection--;
      continue;
    }
    else // no more redirection
    {
      $code = 0;
      curl_close($ch);
    }
  }
  while($code);
  return $curlResult;
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。