首页 > 解决方案 > 运行 yii2 控制台操作时出现错误请求

问题描述

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

突然,在运行该控制台操作时,我们开始收到一个错误的请求。我们的 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 配置吗?

标签: yii2console-applicationbad-request

解决方案


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

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

有谁知道为什么?


推荐阅读