【发布时间】:2011-05-22 10:14:07
【问题描述】:
我正在使用 Codeigniter Curl 库,作者使用 curl 选项的整数等效项。 php 手册为curl_setopt_array 说明了这一点:
键应该是有效的 curl_setopt() 常量或其整数 等价物。
我如何确定常量的整数等价物是什么?我用谷歌搜索了它,但没有找到任何东西。
谢谢,马克
【问题讨论】:
标签: php curl integer constants
我正在使用 Codeigniter Curl 库,作者使用 curl 选项的整数等效项。 php 手册为curl_setopt_array 说明了这一点:
键应该是有效的 curl_setopt() 常量或其整数 等价物。
我如何确定常量的整数等价物是什么?我用谷歌搜索了它,但没有找到任何东西。
谢谢,马克
【问题讨论】:
标签: php curl integer constants
回显/打印它们...
例子:
<?php
echo(CURLOPT_URL);
【讨论】:
$arr = get_defined_constants(true);
var_dump($arr['curl']);
【讨论】:
get_defined_constants()。
扩展ajreal的回答
$constants = get_defined_constants(true);
$curlOptLookup = preg_grep('/^CURLOPT_/', array_flip($constants['curl']));
var_dump($curlOptLookup);
上面给出了一个整数查找,所以下面会起作用:
echo $curlOptLookup[119]; // outputs "CURLOPT_FTP_SSL"
如果你想要选项,正确的方式需要再次翻转它:
$curlOpts = array_flip($curlOptLookup);
echo $curlOpts['CURLOPT_FTP_SSL']; // outputs 119
【讨论】:
preg_grep() 通话的途中执行array_flip(),这显然需要在之后进行反转。
请注意,某些常量具有与其关联的相同值,在上面的答案中,这些将被覆盖。要获得完整列表,您不能填充数组。
$arr = get_defined_constants(true);
foreach ($arr['curl'] as $k => $v) {
if (preg_match('/CURLOPT/',$k)) {
print $v." => '$k',\n";
}
}
例如输出 10026:-
10026 => 'CURLOPT_SSLCERTPASSWD'
10026 => 'CURLOPT_SSLKEYPASSWD'
10026 => 'CURLOPT_KEYPASSWD'
【讨论】:
@Orbling 获取由 curlopt 值索引的数组的技术大部分是正确的,除了您应该过滤掉 CURLOPT_* 元素在翻转数组之前,因为在不同的CURLOPT_*、CURLE_*、CURLSSH_*(等等)选项之间存在值冲突,这些选项不是只是彼此的别名。
例如,CURLOPT_POST 和 CURLE_TOO_MANY_REDIRECTS 的值都是 47。当您调用 array_flip($constants['curl']) 时,后面的条目会覆盖前者,而您会丢失 CURLOPT_POST。
所以也许可以这样做:
$constants = get_defined_constants(true);
$curlOptKeys = preg_grep('/^CURLOPT_/', array_keys($constants['curl']));
$curlOpts = array_intersect_key($constants['curl'], array_flip($curlOptKeys));
$curlOptLookup = array_flip($curlOpts);
echo $curlOpts['CURLOPT_POST']; // 47
echo $curlOptLookup[47]; // 'CURLOPT_POST'
【讨论】: