У меня есть PHP-скрипт, который отображает твиты, встроенные в сайт, который я создал на своем локальном компьютере. Когда я загрузил сайт на свой сервер IIS 8.0, скрипт PHP больше не работает, и я получаю эту ошибку:
Предупреждение: недопустимый аргумент для foreach () в C: \ inetpub \ wwwroot \ i360_new \ footer.php в строке 76
Сценарий такой:
<?php
ini_set('display_errors', 1);
require_once('TwitterAPIExchange.php');
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
'oauth_access_token' => "xxxxx",
'oauth_access_token_secret' => "xxxxx",
'consumer_key' => "xxxxx",
'consumer_secret' => "xxxxx"
);
/** Perform a GET request and echo the response **/
/** Note: Set the GET field BEFORE calling buildOauth(); **/
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$getfield = '?screen_name=interactive360&count=1';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
$string = json_decode($twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest(),$assoc = TRUE);
foreach($string as $items)
{
echo $items['text']."<br />";
}
?>
Я думал, что это может быть проблема с версией PHP, но на моем локальном компьютере установлена версия 5.4.10, а на моем сервере - версия 5.4.14.
Вы сравнивали оба сервера phpinfo ()? При работе почти в одной и той же среде каждый сервер может работать по-разному в зависимости от того, какие модули установлены.
Оказывается, это проблема SSL / CURL. В файле TwitterAPIExchange.php мне пришлось добавить эти две строки в массив параметров CURL:
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
Возможно, вы захотите убедиться, что строка $ не пуста. Я считаю, что ForEach выдаст эту ошибку, если вы предоставите пустую строку. Похоже, строка зависит от TwitterAPIExchange.php, я вижу «Требовать один раз», но убедитесь, что она настроена правильно.