PHP curl_setopt() 无效字符 (\0) 在 curl_init() 上失败;

Posted

技术标签:

【中文标题】PHP curl_setopt() 无效字符 (\\0) 在 curl_init() 上失败;【英文标题】:PHP curl_setopt() invalid characters (\0) failing on curl_init();PHP curl_setopt() 无效字符 (\0) 在 curl_init() 上失败; 【发布时间】:2016-10-15 21:14:03 【问题描述】:

我最近将我的测试服务器从 wamp(非常旧的版本)升级到了新版本的 xampp。由于升级我用来提取 CSV 数据的 CURL 失败。

我收到以下错误:

Warning: curl_setopt(): Curl option contains invalid characters (\0)

此错误出现在

$ch = curl_init();

完整的初始化如下:

// CURL Initialisation
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $snowAuth);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Set the URL
curl_setopt($ch, CURLOPT_URL, $URL);

这在网络服务器升级之间根本没有改变。我检查了 php.ini 并验证了 php_curl 已启用并确保 extension_dir 也是正确的(C:/xampp/php/ext)。

有什么想法吗?我现在正在尝试回滚到旧版本的 XAMPP。

编辑:变量的值如下(安全的虚拟数据),也不是从用户输入或外部文件中检索到的:

$proxy = "10.0.0.128:8080"
$proxyAuth = "username:password"
$snowAuth = "diffusername:diffpassword"

【问题讨论】:

来自@keupsonite:变量$proxy$proxyAuth$snowAuth的内容是什么?数据来自用户还是其他文件?我认为您的文件中有一个 BOM 字符。您需要将其删除。 【参考方案1】:

变量 $proxy, $proxyAuth, $snowAuth 的内容是什么?数据来自用户还是其他文件?

我认为您的文件中有一个 BOM 字符。您需要删除它。

Remove BOM character on Notepad++

编辑:

如果您的变量内容来自用户或文件,请尝试以下操作:

$removeBom = function($var)  return preg_replace('/\\0/', "", $var); ;

// CURL Initialisation                                                          
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $removeBom($proxy));
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $removeBom($proxyAuth));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $removeBom($snowAuth));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Set the URL                                                                  
curl_setopt($ch, CURLOPT_URL, $URL);

【讨论】:

这真的是评论,而不是答案。多一点代表,you will be able to post comments。目前我已经为你添加了评论,并且我将这个帖子标记为删除。 我已尝试转换为 UTF-8,但未解决。出于格式原因,变量的内容在主帖中作为编辑。还有什么线索吗?我仍在卸载并回滚到旧版本。 @Jovin_ 添加了另一个解决方案,如果有帮助,请告诉我。 @keupsonite 消毒功能有效!感谢您的帮助! 我很高兴听到这个消息! :) 很高兴。

以上是关于PHP curl_setopt() 无效字符 (\0) 在 curl_init() 上失败;的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 序列化数组(数组到查询字符串)

PHP curl_setopt函数用法介绍

PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

PHP CURL CURLOPT参数说明(curl_setopt)

php的post

PHP CURL设置Authorization