我正在使用shell_exec()来执行Twitter API调用 .
shell_exec('curl -u user:password -d "id=3191321" http://api.twitter.com/1/twitterapi/twitterlist/members.xml');
当我正确验证并输入id的数字时,这工作正常 .
但是当我尝试输入变量($ id)时,它会搞砸 .
$addtolist = shell_exec('curl -u user:pw -d "id='.$id.'" http://twitter.com/username/twitterlist/members.xml');
我尝试翻转报价类型
$addtolist = shell_exec("curl -u user:pw -d 'id=$id' http://twitter.com/username/twitterlist/members.xml");
我尝试使用双引号并转义它们
$addtolist = shell_exec("curl -u user:pw -d \"id=$id\" http://twitter.com/username/twitterlist/members.xml");
他们都没有工作 .
我究竟做错了什么?
编辑:纯粹主义者说我应该使用PHP的内置卷曲方法,而不是shell_exec . 这也不起作用 .
$ url ='http://twitter.com/user/list/members.xml'; //设置并执行curl进程$ curl_handle = curl_init(); curl_setopt($ curl_handle,CURLOPT_URL,“$ url”); curl_setopt($ curl_handle,CURLOPT_CONNECTTIMEOUT,2); curl_setopt($ curl_handle,CURLOPT_RETURNTRANSFER,1); curl_setopt($ curl_handle,CURLOPT_POST,1); curl_setopt($ curl_handle,CURLOPT_POSTFIELDS,“id = $ id”); curl_setopt($ curl_handle,CURLOPT_USERPWD,“user:pw”); $ buffer = curl_exec($ curl_handle); curl_close($ curl_handle);
它返回bool(false),并且没有正确更新有问题的Twitter列表(练习的全部内容)
3 回答
使用escapeshellarg()来正确编码命令行参数的$ id .
$addtolist = shell_exec('curl -u user:pw -d '.escapeshellarg("id=$id").' http://twitter.com/username/twitterlist/members.xml');
(我意识到这个问题很古老,写作时已经8岁了,但是没有人提供正确的解决方案 . )
尝试打印字符串
echo "curl -u pxlist:Weekend1 -d 'id=$id' http://twitter.com/username/twitterlist/members.xml";
并查看其内容 .$id
可能有问题 . 它是如何初始化的?你有没有尝试过 :
并且正如Filip建议你确定$ id被初始化,在执行之前尝试回显..如果$ id被初始化,请尝试以上