首页 后端开发 php教程 使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLO…错误该怎么解决

使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLO…错误该怎么解决

May 19, 2017 pm 04:39 PM

如果当你在PHP中运行 CURLOPT_FOLLOWLOCATION 然后得到php提示错误信息为:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…

错误中提到两个关键safe_mode和 open_basedir,如果你是虚拟主机的没有设置APPCHE的权限是不能通过修改服务器配置来解决问题的,一般来说,服务器配置safe_mode都为off,然后为了一些安全对用户有一些限制,通过设置open_basedir来限制虚拟主机用户的PHP执行文件夹,因此当你使用CURLOPT_FOLLOWLOCATION (php curl函数,深层抓取数据)的时候,一旦有301转向等就会出现文中提到的错误信息.

在查了相关资料后,很快找到了解决办法,http://www.php.cn/php-weizijiaocheng-362563.html,这些方法都在php官方帮助里有.

具体做法是在curl语句用不使用curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true),在php函数中自定义一个函数,

代码如下:

function curl_redir_exec($ch,$debug="")
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops++ >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$debbbb = $data;
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302) {
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
//print_r($url);
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
/*    if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];*/
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
curl_setopt($ch, CURLOPT_URL, $new_url);
//    debug('Redirecting to', $new_url);
return curl_redir_exec($ch);
} else {
$curl_loops=0;
return $debbbb;
}
}
登录后复制

函数定义好后,curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)这条语句替换为curl_redir_exec($ch)

这样以后,我想你的PHP文件应该不会提示错误了,关于这段代码,在提供PHP官方连接用可以找到.

php官方的代码如下

/safe 模式不能curl的函数  
  
    function curl_redir_exec($ch)  
    {  
        static $curl_loops = 0;  
        static $curl_max_loops = 20;  
        if ($curl_loops++ >= $curl_max_loops)  
        {  
            $curl_loops = 0;  
            return FALSE;  
        }  
        curl_setopt($ch, CURLOPT_HEADER, true);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        $data = curl_exec($ch);  
        list($header, $data) = explode("\n\n", $data, 2);  
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
        if ($http_code == 301 || $http_code == 302)  
        {  
            $matches = array();  
            preg_match('/Location:(.*?)\n/', $header, $matches);  
            $url = @parse_url(trim(array_pop($matches)));  
            if (!$url)  
            {  
                //couldn't process the url to redirect to  
                $curl_loops = 0;  
                return $data;  
            }  
            $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));  
            if (!$url['scheme'])  
                $url['scheme'] = $last_url['scheme'];  
            if (!$url['host'])  
                $url['host'] = $last_url['host'];  
            if (!$url['path'])  
                $url['path'] = $last_url['path'];  
            $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');  
            curl_setopt($ch, CURLOPT_URL, $new_url);  
            debug('Redirecting to', $new_url);  
            return curl_redir_exec($ch);  
        } else {  
            $curl_loops=0;  
            return $data;  
        }  
    }  
//end
登录后复制

【相关文章推荐】

1. php curl_setopt函数概念与用法实例介绍

2.使用php curl_setopt()函数实现抓取网页与POST数据的简单例子

3.php curl_setopt函数模拟用户登录示例

4.PHP curl_exec函数的用法实例详解

以上是使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLO…错误该怎么解决的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

无法完成操作(错误0x0000771)打印机错误 无法完成操作(错误0x0000771)打印机错误 Mar 16, 2024 pm 03:50 PM

如果您在使用打印机时遇到错误消息,例如操作无法完成(错误0x00000771),可能是因为打印机已断开连接。在这种情况下,您可以通过以下方法解决问题。在本文中,我们将讨论如何在Windows11/10PC上修复此问题。整个错误信息说:操作无法完成(错误0x0000771)。指定的打印机已被删除。修复WindowsPC上的0x00000771打印机错误若要修复打印机错误操作无法完成(错误0x0000771),指定的打印机已在Windows11/10PC上删除,请遵循以下解决方案:重新启动打印假脱机

揭秘HTTP状态码460的出现原因 揭秘HTTP状态码460的出现原因 Feb 19, 2024 pm 08:30 PM

解密HTTP状态码460:为什么会出现这个错误?引言:在日常的网络使用中,经常会遇到各种各样的错误提示,其中包括HTTP状态码。这些状态码是HTTP协议定义的一种机制,用于指示请求的处理情况。在这些状态码中,有一种比较罕见的错误码,即460。本文将深入探讨这个错误码,并解释为什么会出现这个错误。HTTP状态码460的定义:首先,我们需要了解HTTP状态码的基

Windows沙盒启动失败-访问被拒绝 Windows沙盒启动失败-访问被拒绝 Feb 19, 2024 pm 01:00 PM

Windows沙盒是否终止,并显示Windows沙盒无法启动,错误0x80070005,拒绝访问消息?一些用户报告说,Windows沙盒无法打开。如果您也遇到此错误,您可以按照本指南进行修复。Windows沙盒启动失败-访问被拒绝如果Windows沙盒终止,并显示Windows沙盒无法启动,错误0x80070005,拒绝访问消息,请确保您以管理员身份登录。此类错误通常是由于权限不足引起的。因此,请尝试以管理员身份登录并查看是否解决问题。如果问题仍然存在,可以尝试以下解决方案:以管理员身份运行Wi

Windows Update 更新提示Error 0x8024401c错误的解决方法 Windows Update 更新提示Error 0x8024401c错误的解决方法 Jun 08, 2024 pm 12:18 PM

目录解决方法一解决方法二一、删除Windows更新的临时文件二、修复受损的系统文件三、查看并修改注册表项四、关闭网卡IPv6五、运行WindowsUpdateTroubleshootor工具进行修复六、关闭防火墙和其它相关的杀毒软件。七、关闭WidowsUpdate服务。解决方法三解决方法四华为计算机Windows更新出现“0x8024401c”报错问题现象问题原因解决方案仍未解决?最近web服务器因为系统漏洞需要更新,登录服务器之后,更新提示错误代码0x8024401c解决方法一

解决win11安装autocad时遇到的错误 解决win11安装autocad时遇到的错误 Dec 30, 2023 pm 03:23 PM

AutoCAD是最常用的图纸设计软件之一,但是我们在win11上想要使用时,有可能会遇到win11安装autocad出现错误的问题,这时候我们可以尝试修改注册表来解决。win11安装autocad出现错误:第一步,按下键盘“win徽标+r”打开运行。第二步,输入“regedit”回车打开注册表。3、将“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System”粘贴进上方路径里。4、进入后,双击

服务器在创建新的虚拟机时遇到错误,0x80070003 服务器在创建新的虚拟机时遇到错误,0x80070003 Feb 19, 2024 pm 02:30 PM

在使用Hyper-V创建或启动虚拟机时,如果遇到错误代码0x80070003,可能是由于权限问题、文件损坏或配置错误造成的。解决方法包括检查文件权限、修复损坏文件、确保正确配置等。可通过逐一排除不同可能性来解决此问题。整个错误消息如下所示:服务器在创建[虚拟机名]时遇到错误。无法创建新的虚拟机。无法访问配置存储:系统找不到指定的路径。(0x80070003)。导致此错误的一些可能原因包括:虚拟机文件已损坏。这可能是由于恶意软件、病毒或广告软件攻击而发生的。虽然发生这种情况的可能性很低,但你不能完

Linux下更新curl版本教程! Linux下更新curl版本教程! Mar 07, 2024 am 08:30 AM

在Linux下更新curl版本,您可以按照以下步骤进行操作:检查当前curl版本:首先,您需要确定当前系统中安装的curl版本。打开终端,并执行以下命令:curl--version该命令将显示当前curl的版本信息。确认可用的curl版本:在更新curl之前,您需要确定可用的最新版本。您可以访问curl的官方网站(curl.haxx.se)或相关的软件源,查找最新版本的curl。下载curl源代码:使用curl或浏览器,下载您选择的curl版本的源代码文件(通常为.tar.gz或.tar.bz2

解决Tomcat 404错误:快速实用技巧 解决Tomcat 404错误:快速实用技巧 Dec 28, 2023 am 08:05 AM

快速解决Tomcat404错误的实用技巧Tomcat是一个常用的JavaWeb应用服务器,在开发和部署JavaWeb应用时经常会用到。然而,有时候我们可能会遇到Tomcat的404错误,这意味着Tomcat无法找到请求的资源。这个错误可能由多个因素引起,但在本文中,我们将介绍一些常见的解决方案和技巧,帮助您快速解决Tomcat的404错误。检查URL路径

See all articles