You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Rector命令时遭遇/tmp目录权限拒绝错误求助

解决Rector运行时/tmp目录权限拒绝问题

问题描述

执行命令:

vendor/bin/rector process --dry-run

出现错误:

[ERROR] Failed to create "/tmp/rector_cached_files/26": mkdir(): Permission denied

环境背景:

  • Web服务器进程以普通用户身份运行,root身份可正常执行,但必须以普通用户运行
  • 同服务器另一域名使用完全相同配置可正常运行,新建域名重复配置后问题依旧
  • 已切换PHP 7.4/8.0/8.1版本,当前为Apache + PHP 8.1(ea-php81)PHP-FPM

当前rector.php配置:

<?php
declare(strict_types=1);

use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector;
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromStrictConstructorRector;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Core\ValueObject\PhpVersion;

return static function (RectorConfig $rectorConfig): void {
    
    $rectorConfig->skip([
        __DIR__ . '/assets',
        __DIR__ . '/blocks',
        __DIR__ . '/install',
        __DIR__ . '/modules/Forums',
        __DIR__ . '/modules/Advertising',
        __DIR__ . '/modules/Arcade_Tweaks',
        __DIR__ . '/modules/Blog_Submit',
        __DIR__ . '/modules/Blog_Topics',
        __DIR__ . '/modules/Blogs',
        __DIR__ . '/modules/Blogs_Top',
        __DIR__ . '/modules/Bookmarks',
        __DIR__ . '/modules/Cemetery',
        __DIR__ . '/modules/cPanel_Login',
        __DIR__ . '/modules/CSS_Color_Chart',
        __DIR__ . '/modules/CSS_Reference',
        __DIR__ . '/modules/Docs',
        __DIR__ . '/modules/Donations',
        __DIR__ . '/modules/ECalendar',
        __DIR__ . '/modules/Evo_UserBlock',
        __DIR__ . '/modules/FAQ',
        __DIR__ . '/modules/Feedback',
        __DIR__ . '/modules/File_Repository',
        __DIR__ . '/modules/Google-Site-Map',
        __DIR__ . '/modules/Groups',
        __DIR__ . '/modules/HTML_Newsletter',
        __DIR__ . '/modules/HTML_to_PHP',
        __DIR__ . '/modules/Image_Repository',
        __DIR__ . '/modules/Link_Us',
        __DIR__ . '/modules/Loan_Amortization',
        __DIR__ . '/modules/Member_List',
        __DIR__ . '/modules/My_Forum_Topics',
        __DIR__ . '/modules/Network',
        __DIR__ . '/modules/Network_Advertising',
        __DIR__ . '/modules/Network_Projects',
        __DIR__ . '/modules/NukeSentinel',
        __DIR__ . '/modules/Private_Messages',
        __DIR__ . '/modules/Profile',
        __DIR__ . '/modules/Proof_Of_God',
        __DIR__ . '/modules/Recommend_Us',
        __DIR__ . '/modules/Reviews',
        __DIR__ . '/modules/Search',
        __DIR__ . '/modules/Shout_Box',
        __DIR__ . '/modules/Spambot_Killer',
        __DIR__ . '/modules/Statistics',
        __DIR__ . '/modules/Surveys',
        __DIR__ . '/modules/Titanium_SandBox',
        __DIR__ . '/modules/Web_Links',
        __DIR__ . '/modules/Your_Account',
        
        __DIR__ . '/admin',
        __DIR__ . '/themes',
        __DIR__ . '/dev_modules',
        __DIR__ . '/cgi-bin',
        __DIR__ . '/.well-known',
        __DIR__ . '/vendor',
    ]);
    
    $rectorConfig->paths([
        __DIR__ . '/includes/classes/class.identify.php',
    ]);

    $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
    
    $rectorConfig->phpVersion(PhpVersion::PHP_81);
    $rectorConfig->sets([
        LevelSetList::UP_TO_PHP_81,
        SetList::CODE_QUALITY,
    ]);

};
?>

解决方案

1. 清理/tmp下的旧缓存目录

如果之前用root运行过Rector,/tmp/rector_cached_files目录可能属于root,导致普通用户无法写入。执行以下命令删除该目录:

sudo rm -rf /tmp/rector_cached_files

之后用普通用户重新运行Rector命令,让其自行创建权限正确的缓存目录。

2. 为Rector指定项目内的自定义缓存目录

修改rector.php配置,添加自定义缓存目录(放在项目根目录下,确保普通用户有读写权限):

return static function (RectorConfig $rectorConfig): void {
    // 其他配置保持不变
    $rectorConfig->cacheDirectory(__DIR__ . '/.rector_cache');
};

然后创建该目录并设置权限:

mkdir .rector_cache
chown your-web-user:your-web-group .rector_cache  # 替换成你的Web进程用户和组
chmod 755 .rector_cache

3. 检查系统/tmp目录权限

确保系统/tmp目录权限为1777(sticky位,允许所有用户写入但只能删除自己的文件):

ls -ld /tmp

如果权限不对,执行:

sudo chmod 1777 /tmp

4. 检查PHP-FPM的open_basedir限制

查看PHP-FPM的域名配置文件(通常位于/etc/php/8.1/fpm/pool.d/[your-domain].conf),检查是否有open_basedir设置。如果存在,确保/tmp或自定义的.rector_cache目录在允许的路径列表中:

php_admin_value[open_basedir] = /path/to/your/project:/tmp:/path/to/.rector_cache

修改后重启PHP-FPM服务:

sudo systemctl restart php-fpm

内容的提问来源于stack exchange,提问作者Ernest Allen Buffington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:15:22