Yii1.1.32部署白屏或500错误主因是PHP版本/扩展不匹配、入口路径错位或初始化参数缺失;须用PHP 5.3–7.3,启用mbstring、pdo、openssl等扩展,index.php须与protected同级且runtime/assets可写,cookieValidationKey必须配置。

新手第一次用Yii1.1.32部署项目时,环境配置不对会导致白屏、500错误、路由失效或静态资源404,根本原因是PHP版本/扩展不匹配、web服务器入口路径错位、或框架初始化参数缺失。
确认PHP环境是否达标
Yii 1.1.32最低要求PHP 5.3.0,但实际必须启用以下扩展:mbstring、pdo、pdo_mysql、openssl、json、ctype。缺任一都会在init阶段崩溃。
打开命令行,执行:php -v → 确认版本≥5.3且<7.4(Yii1不兼容PHP 7.4+);再执行:php -m | grep -E "mbstring|pdo|openssl|json" → 缺哪个就去php.ini里取消对应extension=xxx.dll(Windows)或extension=xxx.so(Linux/macOS)前的分号,改完重启Web服务。
【重要前提】Yii1.1.32不能运行在PHP 7.4及以上版本,否则会因each()废弃、mysql_*函数移除等直接报致命错误。
检查Web服务器入口指向是否正确
Yii1默认入口是index.php,它必须放在Web根目录下,且该目录需与protected/同级。常见错误是把整个项目文件夹直接扔进Apache的htdocs,导致index.php路径为http://localhost/your-project/index.php——这会让dirname(__FILE__)计算出错,无法加载protected目录。
正确做法:将index.php和css/js/images/等静态资源目录放到Web服务器根目录(如Apache的htdocs),而protected/、framework/、themes/等必须放在Web根目录之外(例如C:\yii-project\),然后修改index.php中$yii路径指向外部framework位置,$config指向外部protected/config/main.php。
若坚持把全部文件放Web内,请确保index.php顶部的define('YII_PATH', dirname(__FILE__).'/framework/yii.php');路径能真实定位到框架文件,否则直接500。
强制显示错误并定位真实报错点
第一步:打开index.php,确认开头三行是:
defined('YII_DEBUG') or define('YII_DEBUG',true);<br>defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);<br>error_reporting(E_ALL); ini_set('display_errors', '1');
第二步:删掉index.php末尾的require_once($yii);上方所有try...catch包裹,让原始异常透出。
第三步:浏览器访问,看是否出现明确的Fatal Error提示。如果仍是空白,说明错误发生在PHP解析阶段——极大概率是PHP版本超标或扩展缺失,不是Yii代码问题。
第四步:查Web服务器错误日志。Apache看logs/error.log,IIS在事件查看器→Windows日志→应用程序里搜“PHP Fatal”,Nginx则看error.log中“FastCGI sent in stderr”行。
修复runtime和assets目录权限
Yii1启动时会尝试写入protected/runtime/(缓存、日志)和assets/(发布静态资源),这两个目录必须对Web服务器进程用户可写。
Windows IIS:右键runtime文件夹→属性→安全→编辑→添加IIS_IUSRS用户→勾选“修改”;assets同理。
Linux/macOS:执行chmod 755 protected/runtime assets,再执行chown -R www-data:www-data protected/runtime assets(Ubuntu)或chown -R _www:_www protected/runtime assets(macOS + Apache)。
【关键陷阱】assets目录若不可写,Yii1不会报错,但JS/CSS会404,页面样式错乱、AJAX失效——这是新手最常忽略的隐形故障点。
验证cookieValidationKey是否已配置
打开protected/config/main.php,找到'components'=>array('request'=>array(段,在里面确认存在:
'enableCookieValidation'=>true,<br>'cookieValidationKey'=>'任意32位以上随机字符串',
若缺失或为空,Yii1会在初始化session时抛出CException,但默认被静默吞掉,只返回500。可用md5(uniqid(rand(),true))生成临时密钥填入。
注意:此密钥一旦设定就不能随意更改,否则所有已发cookie失效,用户需重新登录。


















