"Array keys must be CURLOPT constants or equivalent integer values" 在 PHP 中使用 curl_setopt_array() 7
"Array keys must be CURLOPT constants or equivalent integer values" using curl_setopt_array() in PHP 7
我正在构建一个抓取脚本以从网站中提取一些信息,但在测试时我不断收到以下错误:
PHP Warning: curl_setopt_array(): Array keys must be CURLOPT
constants or equivalent integer values
它指向我代码中的以下行:
curl_setopt_array($ch, $curlOptions);
现在 $ch
来自:
$ch = curl_init($url);
和 $url
是这样设置的(URL 是故意的,因为我正在处理因尝试打开网站而产生的错误,如果它不存在):
$url = "https://www.kjsdsajlksajksajdklsadajklda.com";
$curlOptions
设置在这里:
$curlOptions = array(
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_HEADER' => true,
'CURLOPT_FOLLOWLOCATION' => true,
'CURLOPT_ENCODING' => "",
'CURLOPT_AUTOREFERER' => true,
'CURLOPT_CONNECTTIMEOUT' => 120,
'CURLOPT_TIMEOUT' => 120,
'CURLOPT_MAXREDIRS' => 10,
'CURLINFO_HEADER_OUT' => true,
'CURLOPT_SSL_VERIFYPEER' => false,
'CURLOPT_HTTP_VERSION' => 'CURL_HTTP_VERSION_1_1',
'CURLOPT_COOKIE' => $cookiesJar,
'CURLOPT_USERAGENT' => $userAgent,
);
我在测试时删除了 $curlOptions
块,当它被删除时我没有收到错误。但是,注释掉数组的不同元素并不能解决问题,错误仍然存在。我也更改了我使用的 URL,但没有任何区别。我还分别将 true
或 false
的任何实例更改为 1
和 0
,这也没有什么不同。
所以我真的有点卡住了。我在使用 PHP 7 的 Debian 8 系统上开发这个,版本输出在这里:
PHP 7.0.16-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.16-1~dotdeb+8.1, Copyright (c) 1999-2017, by Zend Technologies
到底是怎么回事?我编写的代码(应该与 PHP 5 一起使用)与 PHP 7 是否存在兼容性问题,或者是否存在更明显或更简单的问题?
您使用字符串 ('CURLOPT_RETURNTRANSFER'
) 而不是常量 (CURLOPT_RETURNTRANSFER
)
var_dump(CURLOPT_RETURNTRANSFER, 'CURLOPT_RETURNTRANSFER');
// output
int 19913
string 'CURLOPT_RETURNTRANSFER'
我正在构建一个抓取脚本以从网站中提取一些信息,但在测试时我不断收到以下错误:
PHP Warning: curl_setopt_array(): Array keys must be CURLOPT constants or equivalent integer values
它指向我代码中的以下行:
curl_setopt_array($ch, $curlOptions);
现在 $ch
来自:
$ch = curl_init($url);
和 $url
是这样设置的(URL 是故意的,因为我正在处理因尝试打开网站而产生的错误,如果它不存在):
$url = "https://www.kjsdsajlksajksajdklsadajklda.com";
$curlOptions
设置在这里:
$curlOptions = array(
'CURLOPT_RETURNTRANSFER' => true,
'CURLOPT_HEADER' => true,
'CURLOPT_FOLLOWLOCATION' => true,
'CURLOPT_ENCODING' => "",
'CURLOPT_AUTOREFERER' => true,
'CURLOPT_CONNECTTIMEOUT' => 120,
'CURLOPT_TIMEOUT' => 120,
'CURLOPT_MAXREDIRS' => 10,
'CURLINFO_HEADER_OUT' => true,
'CURLOPT_SSL_VERIFYPEER' => false,
'CURLOPT_HTTP_VERSION' => 'CURL_HTTP_VERSION_1_1',
'CURLOPT_COOKIE' => $cookiesJar,
'CURLOPT_USERAGENT' => $userAgent,
);
我在测试时删除了 $curlOptions
块,当它被删除时我没有收到错误。但是,注释掉数组的不同元素并不能解决问题,错误仍然存在。我也更改了我使用的 URL,但没有任何区别。我还分别将 true
或 false
的任何实例更改为 1
和 0
,这也没有什么不同。
所以我真的有点卡住了。我在使用 PHP 7 的 Debian 8 系统上开发这个,版本输出在这里:
PHP 7.0.16-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.16-1~dotdeb+8.1, Copyright (c) 1999-2017, by Zend Technologies
到底是怎么回事?我编写的代码(应该与 PHP 5 一起使用)与 PHP 7 是否存在兼容性问题,或者是否存在更明显或更简单的问题?
您使用字符串 ('CURLOPT_RETURNTRANSFER'
) 而不是常量 (CURLOPT_RETURNTRANSFER
)
var_dump(CURLOPT_RETURNTRANSFER, 'CURLOPT_RETURNTRANSFER');
// output
int 19913
string 'CURLOPT_RETURNTRANSFER'