yiisoft / yii2

Yii 2: The Fast, Secure and Professional PHP Framework
http://www.yiiframework.com
BSD 3-Clause "New" or "Revised" License
14.23k stars 6.91k forks source link

getRuntimePath() in HTMLPurifier #18392

Closed error-500 closed 3 years ago

error-500 commented 3 years ago

What steps will reproduce the problem?

Application composer.json

{
    "name": "XXXX/app",
    "description": "XXXX",
    "type": "project",
    "license": "MIT",
    "authors": [{
        "name": "XXXX",
        "email": "xxxxx@example"
    }],
    "minimum-stability": "stable",
    "require": {
        "yiisoft/yii2": "^2.0"
    },
    "require-dev": {
        "yiisoft/yii2-debug": "~2.0",
        "squizlabs/php_codesniffer": "~3.0",
        "codeception/codeception": "~4.1"
    },
    "config": {
        "secure-http": false,
        "optimize-autoloader": true,
        "classmap-authoritative": true,
        "apcu-autoloader": true
    },
    "repositories": [{
        "type": "composer",
        "url": "https://asset-packagist.org"
    }]
}

Aliases CFG:

/**
 * Yii namespace aliases config
 */
return [
    '@app' => dirname(__DIR__),
    '@webroot' => dirname(__DIR__), //dirname($_SERVER['SCRIPT_NAME']),
    '@vendor' => dirname(__DIR__) . '/vendor',
    //'@yii'  => '@vendor/yiisoft/yii2',
    '@bower'  => '@vendor/bower-asset',
    '@runtime' => sys_get_temp_dir(),
];
  1. Do post request with uncorect SCRF
  2. Open debug panel Logs
  3. Click button "All"

    What is the expected result?

    List of oldest logs in yii2-debug panel

    What do you get instead?

    Error

    yii\base\ErrorException: Base directory /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/runtime does not exist,
                    please create or change using %Cache.SerializerPath in /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php:235
    Stack trace:
    #0 [internal function]: yii\base\ErrorHandler->handleError()
    #1 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php(235): trigger_error()
    #2 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php(125): HTMLPurifier_DefinitionCache_Serializer->_prepareDir()
    #3 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator.php(108): HTMLPurifier_DefinitionCache_Serializer->cleanup()
    #4 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php(72): HTMLPurifier_DefinitionCache_Decorator->cleanup()
    #5 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php(505): HTMLPurifier_DefinitionCache_Decorator_Cleanup->get()
    #6 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php(415): HTMLPurifier_Config->getDefinition()
    #7 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier/Generator.php(74): HTMLPurifier_Config->getHTMLDefinition()
    #8 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/ezyang/htmlpurifier/library/HTMLPurifier.php(158): HTMLPurifier_Generator->__construct()
    #9 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/helpers/BaseHtmlPurifier.php(58): HTMLPurifier->purify()
    #10 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/i18n/Formatter.php(544): yii\helpers\BaseHtmlPurifier::process()
    #11 [internal function]: yii\i18n\Formatter->asHtml()
    #12 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/i18n/Formatter.php(460): call_user_func_array()
    #13 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/DataColumn.php(244): yii\i18n\Formatter->format()
    #14 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/Column.php(111): yii\grid\DataColumn->renderDataCellContent()
    #15 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/GridView.php(525): yii\grid\Column->renderDataCell()
    #16 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/GridView.php(494): yii\grid\GridView->renderTableRow()
    #17 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/GridView.php(358): yii\grid\GridView->renderTableBody()
    #18 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/widgets/BaseListView.php(160): yii\grid\GridView->renderItems()
    #19 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/GridView.php(326): yii\widgets\BaseListView->renderSection()
    #20 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/widgets/BaseListView.php(135): yii\grid\GridView->renderSection()
    #21 [internal function]: yii\widgets\BaseListView->yii\widgets\{closure}()
    #22 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/widgets/BaseListView.php(138): preg_replace_callback()
    #23 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/grid/GridView.php(301): yii\widgets\BaseListView->run()
    #24 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/Widget.php(141): yii\grid\GridView->run()
    #25 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2-debug/src/views/default/index.php(169): yii\base\Widget::widget()
    #26 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/View.php(348): require('/srv/www/cl-wp-...')
    #27 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/View.php(257): yii\base\View->renderPhpFile()
    #28 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/View.php(156): yii\base\View->renderFile()
    #29 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/Controller.php(409): yii\base\View->render()
    #30 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2-debug/src/controllers/DefaultController.php(94): yii\base\Controller->render()
    #31 [internal function]: yii\debug\controllers\DefaultController->actionIndex()
    #32 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
    #33 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams()
    #34 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction()
    #35 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
    #36 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
    #37 /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/index.php(10): yii\base\Application->run()
    #38 {main}

Additional info

Q A
Yii version 2.0.39.2
Yii2-debug 2.1.15
PHP version 7.4.12
Operating system Debian 9
bizley commented 3 years ago

I think you mixed the expected and actual results there. But anyway - does it work if you set runtimePath in your config instead of setting alias to the runtime directory? IIRC this is the proper way for it, alias is based on the path and not the other way around.

error-500 commented 3 years ago

Yes, im put in not rigth section. But any way - alias @runtime direct to /tmp in log we are see that

yii\base\ErrorException: Base directory /srv/www/cl-wp-easp.lo/htdocs/tools/j2w-converter/runtime does not exist,

I'm try understend why it happen Its yii2-debug module

bizley commented 3 years ago

It's because you have not set runtime path, you have set alias runtime to the temp folder, as I said.