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的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)