shell_exec экранирование кавычек в php для API Twitter - PullRequest
0 голосов
/ 01 апреля 2010

Я использую shell_exec () для выполнения вызова API Twitter.

shell_exec('curl -u user:password -d "id=3191321" http://api.twitter.com/1/twitterapi/twitterlist/members.xml');

Это прекрасно работает, когда я правильно аутентифицируюсь и ввожу число для идентификатора.

Но когда я пытаюсь вставить переменную ($ 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");

Никто из них не работал.

Что я делаю не так?

EDIT: пуристы говорят, что я должен использовать встроенные в PHP методы curl, а не 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, "пользователь: pw");

$ buffer = curl_exec ($ curl_handle);

curl_close ($ curl_handle);

Возвращает bool (false) и корректно не обновляет рассматриваемый список Twitter (весь смысл упражнения)

Ответы [ 3 ]

1 голос
/ 02 апреля 2010

Попробуйте напечатать строку echo "curl -u pxlist:Weekend1 -d 'id=$id' http://twitter.com/username/twitterlist/members.xml"; и посмотрите, что она говорит. Возможно, что-то не так с $id. Как это инициализируется?

0 голосов
/ 07 мая 2018

используйте escapeshellarg () для правильного кодирования $ id для аргумента командной строки.

$addtolist = shell_exec('curl -u user:pw -d '.escapeshellarg("id=$id").' http://twitter.com/username/twitterlist/members.xml');

(я понимаю, этот вопрос старый, 8 лет на момент написания, но никто не дал правильного решения.)

0 голосов
/ 02 апреля 2010

Вы пробовали:

shell_exec("curl -u user:password -d \"id=" .$id. "\" http://api.twitter.com/1/twitterapi/twitterlist/members.xml");

и, как сказал Филип, вы уверены, что $ id инициализирован, попробуйте повторить перед выполнением .. попробуйте это выше, если $ id инициализирован

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...