在PHP curl库中,可以使用curl_setopt()
函数设置请求的选项,例如
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
允许curl跟踪对给定" Location: ...
"的重定向响应。头。常量CURLOPT_FOLLOWLOCATION
表示一个整数,表示curl库中的选项,此处int(52)
的示例整数值为CURLOPT_FOLLOWLOCATION
。
当通过选项整数值获取常量名时,不可能确切地找出使用了哪个选项常量,因为某些常量具有相同的值(例如Get a constant name as a string中所示)。
这导致了一个问题:为什么相同选项存在重复的常量名称,这意味着什么?
答案 0 :(得分:1)
不同的命名选项常量表示相同的设置或选项。这是由于底层卷曲库随时间的变化。您不仅可以在PHP中交替使用它们,还可以在curl库中使用它们,因为PHP会从libcurl c库中导入这些常量。
这也是我在开始时可以想象的一些选项只是一个别名。以curl选项int(10009)
为例,它分配了两个不同的命名常量:
CURLOPT_READDATA
:未记录的常量CURLOPT_INFILE
:上传时应从中读取传输文件的流资源。第一个没有在PHP手册中记录。 curl库在此处记录了它:http://curl.haxx.se/libcurl/c/CURLOPT_READDATA.html - 它实际上与PHP中的 CURLOPT_INFILE
具有相同的含义。这可以在curl list of options and when introduced中作为其来源的一部分轻松跟踪:
Name Introduced Deprecated Removed
CURLOPT_READDATA 7.9.7
CURLOPT_INFILE 7.1 7.9.7
此外,还可以在来源(ref)中检查别名的状态:
#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */
CURLOPT_INFILE
显然是CURLOPT_READDATA
的别名,因为它已被弃用。 PHP手册尚未反映这一点。
另一组不同的命名选项常量代表相同的选项:
CURLOPT_KEYPASSWD
:使用CURLOPT_SSLKEY
或CURLOPT_SSH_PRIVATE_KEYFILE
私钥所需的密码字符串。在cURL 7.16.1中添加。CURLOPT_SSLCERTPASSWD
:使用CURLOPT_SSLCERT
证书所需的密码字符串。CURLOPT_SSLKEYPASSWD
:使用CURLOPT_SSLKEY
中指定的私有SSL密钥所需的密码密码字符串。首先再进行版本检查:
Name Introduced Deprecated Removed
CURLOPT_KEYPASSWD 7.17.0
CURLOPT_SSLCERTPASSWD 7.1.1 7.17.0
CURLOPT_SSLKEYPASSWD 7.9.3 7.17.0
这表明后两者已被弃用。让我们看看常量定义(ref& ref):
...
/* These are scheduled to disappear by 2009 */
/* The following were added in 7.17.0 */
#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD
...
#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD
...
因此可以清楚地说,CURLOPT_SSLKEYPASSWD
和CURLOPT_SSLCERTPASSWD
都是CURLOPT_KEYPASSWD
的别名。
由于这会检查我知道的PHP卷曲扩展和the PHP extension imports the constants from the libcurl C library的常量名称中的所有冲突,因此可以确定这些是别名。
在您的代码中使用非弃用的常量以确保将来的兼容性可能是最安全的:
CURLOPT_READDATA
(自7.9.7开始)CURLOPT_KEYPASSWD
(自7.17.0开始)这与以下内容相反:
CURLOPT_INFILE
(自7.1起,自7.9.7起已弃用)CURLOPT_SSLCERTPASSWD
(自7.1.1起,自7.17.0以来已弃用)