在PHP 7中使用curl_setopt_array()"数组键必须是CURLOPT常量或等效整数值"

mic*_*jnr 3 php php-curl php-7

我正在构建一个scrape脚本来从网站中提取一些信息,并在测试时我不断收到以下错误:

PHP警告:curl_setopt_array():数组键必须是CURLOPT常量或等效的整数值

它指向我的代码中的以下行:

curl_setopt_array($ch, $curlOptions);
Run Code Online (Sandbox Code Playgroud)

现在$ch来自:

$ch = curl_init($url);
Run Code Online (Sandbox Code Playgroud)

$url设置为这样(URL是故意的,因为我正在处理因尝试打开网站而产生的错误,如果它不存在):

$url = "https://www.kjsdsajlksajksajdklsadajklda.com";
Run Code Online (Sandbox Code Playgroud)

$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,
    );
Run Code Online (Sandbox Code Playgroud)

$curlOptions在测试时删除了块,当它被删除时我没有收到错误.但是,注释掉数组的不同元素并不能解决问题,并且错误仍然存​​在.我已经更改了我使用的URL,但没有任何区别.我也改变的任何实例truefalse10分别这也不做了一个差异.

所以我真的有点卡住了.我正在使用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
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?我使用PHP 7编写的代码(应该与PHP 5一起使用)是否存在兼容性问题,还是存在更明显或更简单的问题?

cet*_*ver 12

你使用strings('CURLOPT_RETURNTRANSFER')而不是constants(CURLOPT_RETURNTRANSFER)

var_dump(CURLOPT_RETURNTRANSFER, 'CURLOPT_RETURNTRANSFER');
// output
int 19913
string 'CURLOPT_RETURNTRANSFER'
Run Code Online (Sandbox Code Playgroud)