没有不值得去解决的问题,也没有不值得去学习的技术!

Analyzing and Resolving the Yii 2.0 Error: PHP Warning: strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243

执行命令,报错:PHP Warning: strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243

1. Run the command, and an error occurs: PHP Warning: strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243, as shown in Figure 1

Run the command, and an error occurs: PHP Warning: strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
Figure 1
Plaintext
PS E:\wwwroot\pcs-api> ./yii cmc-console-user/sync
Exception 'yii\web\ServerErrorHttpException' with message 'Framework Service Console HTTP request failed: 租户信息不存在
'

in E:\wwwroot\pcs-api\common\services\CmcConsoleUserService.php:102

Stack trace:
#0 E:\wwwroot\pcs-api\console\controllers\CmcConsoleUserController.php(62): common\services\CmcConsoleUserService::httpG
etUserList(Array)
#1 [internal function]: console\controllers\CmcConsoleUserController->actionSync()
#2 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#3 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#4 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('sync', Array)
#5 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('sync', Array)
#6 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('cmc-console-use...',
 Array)
#7 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('cmc-console-
use...', Array)
#8 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Application.php(386): yii\console\Application->handleRequest(Object(yii\c
onsole\Request))
#9 E:\wwwroot\pcs-api\yii(23): yii\base\Application->run()
#10 {main}
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243

2. Check \console\runtime\logs\app.log

Plaintext

2019-04-02 14:03:05 [-][-][-][warning][yii\log\Dispatcher::dispatch] Unable to send log via yii\log\DbTarget: PHP Warning 'yii\base\ErrorException' with message 'strpos(): Empty needle' 

in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php:243

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError(2, 'strpos(): Empty...', 'E:\\wwwroot\\pcs-...', 243, Array)
#1 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php(243): strpos('yii\\base\\Applic...', '')
#2 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php(124): yii\log\Target::filterMessages(Array, 0, Array, Array)
#3 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Dispatcher.php(189): yii\log\Target->collect(Array, false)
#4 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Logger.php(177): yii\log\Dispatcher->dispatch(Array, false)
#5 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Logger.php(124): yii\log\Logger->flush()
#6 [internal function]: yii\log\Logger->yii\log\{closure}()
#7 {main}
2019-04-02 14:03:05 [-][-][-][info][application] $_GET = []

$_POST = []

$_FILES = []

$_COOKIE = []

$_SERVER = []

3. Edit in the command line

PHP

	var_dump(strpos("Fabio", 'b'));
	exit;

Plaintext

PS E:\wwwroot\pcs-api> ./yii cmc-console-user/sync
int(2)

4. When editing in the command line, once an exception is thrown in the console command line, an error occurs when writing to the log: PHP Warning: strpos(): Empty needle, as shown in Figure 2

When editing in the command line, once an exception is thrown in the console command line, an error occurs when writing to the log: PHP Warning: strpos(): Empty needle
Figure 2
PHP

	var_dump(strpos("Fabio", ''));
	exit;

Plaintext

PS E:\wwwroot\pcs-api> ./yii cmc-console-user/sync
PHP Warning 'yii\base\ErrorException' with message 'strpos(): Empty needle'

in E:\wwwroot\pcs-api\console\controllers\CmcConsoleUserController.php:37

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError(2, 'strpos(): Empty...', 'E:\\wwwroot\\pcs-...', 37, Array)
#1 E:\wwwroot\pcs-api\console\controllers\CmcConsoleUserController.php(37): strpos('Fabio', '')
#2 [internal function]: console\controllers\CmcConsoleUserController->actionSync()
#3 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#4 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#5 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('sync', Array)
#6 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('sync', Array)
#7 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('cmc-console-use...',
 Array)
#8 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('cmc-console-
use...', Array)
#9 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Application.php(386): yii\console\Application->handleRequest(Object(yii\c
onsole\Request))
#10 E:\wwwroot\pcs-api\yii(23): yii\base\Application->run()
#11 {main}
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243
PHP Warning:  strpos(): Empty needle in E:\wwwroot\pcs-api\vendor\yiisoft\yii2\log\Target.php on line 243

5. Edit \console\config\main.php to adjust the log component configuration

PHP

    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                'file' => [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
                'db' => [
                    'class' => 'yii\log\DbTarget',
                    'except' => ['*'],
                    'prefix' => function () {
                        $url = !Yii::$app->request->isConsoleRequest ? Yii::$app->request->getUrl() : null;
                        $user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
                        $userId = $user ? $user->getId(false) : '-';
                        return sprintf('[%s][%s][%s]', Yii::$app->id, $url, $userId);
                    },
                    'logVars' => [],
                ]
            ],
        ],
    ],

Adjust to:

PHP

    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                'file' => [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
                'db' => [
                    'class' => 'yii\log\DbTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
    ],

6. The issue where an error occurs when writing to the log once an exception is thrown in the console command line — PHP Warning: strpos(): Empty needle — has been resolved

Plaintext

PS E:\wwwroot\pcs-api> ./yii cmc-console-user/sync
PHP Warning 'yii\base\ErrorException' with message 'strpos(): Empty needle'

in E:\wwwroot\pcs-api\console\controllers\CmcConsoleUserController.php:37

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError(2, 'strpos(): Empty...', 'E:\\wwwroot\\pcs-...', 37, Array)
#1 E:\wwwroot\pcs-api\console\controllers\CmcConsoleUserController.php(37): strpos('Fabio', '')
#2 [internal function]: console\controllers\CmcConsoleUserController->actionSync()
#3 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#4 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#5 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('sync', Array)
#6 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('sync', Array)
#7 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('cmc-console-use...',
 Array)
#8 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('cmc-console-
use...', Array)
#9 E:\wwwroot\pcs-api\vendor\yiisoft\yii2\base\Application.php(386): yii\console\Application->handleRequest(Object(yii\c
onsole\Request))
#10 E:\wwwroot\pcs-api\yii(23): yii\base\Application->run()
#11 {main}

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系