不同的命名选项常量代表相同的设置或选项。这是由于底层 curl 库随着时间的推移而发生的变化。您不仅可以在 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 curl 扩展和 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 起现已弃用)