运行yii2控制台操作时出现错误请求

时间:2018-05-20 12:25:28

标签: yii2 console-application bad-request

我们的应用程序从前端运行控制台操作,开始发送营销活动,这已经工作了几年。

突然间,我们在运行该控制台操作时开始收到错误请求。 我们的Linux服务器上发生了一些更新,这些更新可能与应用程序行为中的此更改有关。

我们将该操作的输出重定向到文本文件,在此文件中我们看到以下行:

    Status: 400 Bad Request
    X-Powered-By: PHP/5.6.30
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Type: text/html; charset=UTF-8


    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <meta name="csrf-param" content="_csrf">
            ....
            ....

这是CampaignController:

class CampaignController {

    public function actionUpdate($id) {
        $this->startSending($id, 1);
        die('only start sending, no more....');
    }

    private function startSending($campaign_id, $test = 0) {
        $siteUrl = \Yii::$app->urlManager->hostInfo . \Yii::$app->urlManager->baseUrl;

        $php = PHP_BINARY;

        $appDir = \Yii::getAlias('@app');
        $i = strrpos($appDir, 'frontend');
        $yiiDir = substr($appDir, 0, $i - 1);
        $outputFile = $yiiDir . "/console_output/send-campaign-$campaign_id-$test.html";

        $cmd = "php $yiiDir/yii send-campaign/send $campaign_id $siteUrl $test";

        $isWindwos = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false;

        if ($isWindwos) {
            pclose(popen("start /b $cmd > $outputFile", 'r'));
        } else {
            pclose(popen("$cmd  &>$outputFile &", 'r'));
            //exec($cmd . " &>$outputFile &");
        }
    }

}

那么这个错误请求的原因是什么? 可能是服务器更新后某些PHP配置被更改了吗?

1 个答案:

答案 0 :(得分:0)

最后我发现了什么是错的。感谢所有试图提供帮助的人。

问题是服务器上的 PHP 5处理程序设置为suPHP。 将其设置为FastCGI解决了这个问题。

任何人都知道为什么?