PHP 脚本在本地 MAMP 服务器上运行,但在 IIS 8 服务器上运行不起来

PHP 脚本在本地 MAMP 服务器上运行,但在 IIS 8 服务器上运行不起来

我有一个 PHP 脚本,用于显示我在本地计算机上构建的网站中嵌入的推文。当我将网站上传到我的 IIS 8.0 服务器时,PHP 脚本不再起作用,并且我收到此错误:

警告:C:\inetpub\wwwroot\i360_new\footer.php 第 76 行中 foreach() 提供的参数无效

脚本如下:

<?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。

答案1

您是否比较过两个服务器的 phpinfo()?虽然在几乎相同的环境中运行,但每个服务器的工作方式可能有所不同,具体取决于安装的模块。

答案2

您可能需要确保 $string 不为空。我相信如果您提供的字符串为空,ForEach 会抛出此错误。看起来该字符串依赖于 TwitterAPIExchange.php,我看到了“需要一次”,但请确保它配置正确。

答案3

事实证明这是一个 SSL/CURL 问题。在 TwitterAPIExchange.php 文件中,我必须将以下两行添加到 CURL 选项数组中:

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false

相关内容