【发布时间】:2018-06-15 06:20:25
【问题描述】:
我们网络服务器上的 PHP 版本较旧,并且在 curl 调用中不支持 TLSv1.2。所以我想用system()/exec() 打一个 curl 电话。
这有时有效,但有时无效。
失败时没有错误。然后参考这个建议 - https://stackoverflow.com/a/539030/1278063 我在命令末尾添加了 2>&1 以将错误从 stderr 重定向到 stdout。
下面是示例代码-
<?php
$cmd = sprintf('curl -X POST %s --tlsv1.2 2>&1', escapeshellarg($url));
$sysout = exec($cmd,$output,$ret);
print_r($output);
?>
代码失败时的输出如下-
Array (
[0] => mkdir: cannot create directory `/usr/bin/.libs': Permission denied
[1] => /usr/bin/curl: line 202: cd: /root/curl-7.57.0/src: Not a directory
[2] => gcc: curl-slist_wc.o: No such file or directory
[3] => gcc: curl-tool_binmode.o: No such file or directory
[4] => gcc: curl-tool_bname.o: No such file or directory
[5] => gcc: curl-tool_cb_dbg.o: No such file or directory
[6] => gcc: curl-tool_cb_hdr.o: No such file or directory
[7] => gcc: curl-tool_cb_prg.o: No such file or directory
[8] => gcc: curl-tool_cb_rea.o: No such file or directory
[9] => gcc: curl-tool_cb_see.o: No such file or directory
[10] => gcc: curl-tool_cb_wrt.o: No such file or directory
[11] => gcc: curl-tool_cfgable.o: No such file or directory
[12] => gcc: curl-tool_convert.o: No such file or directory
[13] => gcc: curl-tool_dirhie.o: No such file or directory
[14] => gcc: curl-tool_doswin.o: No such file or directory
[15] => gcc: curl-tool_easysrc.o: No such file or directory
[16] => gcc: curl-tool_formparse.o: No such file or directory
[17] => gcc: curl-tool_getparam.o: No such file or directory
[18] => gcc: curl-tool_getpass.o: No such file or directory
[19] => gcc: curl-tool_help.o: No such file or directory
[20] => gcc: curl-tool_helpers.o: No such file or directory
[21] => gcc: curl-tool_homedir.o: No such file or directory
[22] => gcc: curl-tool_hugehelp.o: No such file or directory
[23] => gcc: curl-tool_libinfo.o: No such file or directory
[24] => gcc: curl-tool_main.o: No such file or directory
[25] => gcc: curl-tool_metalink.o: No such file or directory
[26] => gcc: curl-tool_msgs.o: No such file or directory
[27] => gcc: curl-tool_operate.o: No such file or directory
[28] => gcc: curl-tool_operhlp.o: No such file or directory
[29] => gcc: curl-tool_panykey.o: No such file or directory
[30] => gcc: curl-tool_paramhlp.o: No such file or directory
[31] => gcc: curl-tool_parsecfg.o: No such file or directory
[32] => gcc: curl-tool_strdup.o: No such file or directory
[33] => gcc: curl-tool_setopt.o: No such file or directory
[34] => gcc: curl-tool_sleep.o: No such file or directory
[35] => gcc: curl-tool_urlglob.o: No such file or directory
[36] => gcc: curl-tool_util.o: No such file or directory
[37] => gcc: curl-tool_vms.o: No such file or directory
[38] => gcc: curl-tool_writeout.o: No such file or directory
[39] => gcc: curl-tool_xattr.o: No such file or directory
[40] => gcc: ../lib/curl-strtoofft.o: No such file or directory
[41] => gcc: ../lib/curl-nonblock.o: No such file or directory
[42] => gcc: ../lib/curl-warnless.o: No such file or directory
[43] => gcc: ../lib/.libs/libcurl.so: No such file or directory
)
为什么代码有时会起作用?如何让它一直工作?
【问题讨论】:
-
如果您的 PHP 不支持 TLS 1.2,那么您可能运行的版本可能没有任何最近的安全更新,因此可以利用。