最近遇到个特别诡异的问题,请大神们帮忙看下什么问题,`
spl_autoload_register()
自动载入类,一切完美,项目再win和mac中能正常运行,但是当把项目搬到ubantu和centos中,一部分的类能自动require进来,一部分失败了。
考虑过是路径分隔的问题、PHP安全模式问题、权限问题,但是都没解决。
spl_autoload_register(function($class){
$class = str_replace('\\', DIRECTORY_SEPARATOR, $class);//处理命名空间的斜杠“\”
if (strstr($class, '/')) {
//使用命名空间类统一require
$classFile = APP_PATH.$class.".php";
echo $classFile.PHP_EOL;
}else {
$classFile = $class.'.php';
}
if (file_exists($classFile)) {
require_once $classFile;
}else{
echo $classFile.PHP_EOL;
throw new \Exception("内部错误",120000);
}
});
我的项目中当
$TradePay =\Zsmart\Business\Unipay\Offical\Alipay\TradePay()
时正常情况下应该自动require这个文件APP_PATH./Zsmart/Business/Unipay/Offical/Alipay/TradePay.php
,这个我文件反复检查过,存在,且文件有777权限,但是用is_file()和file_exist()检查居然是fasle,太诡异了,请问下大家这是啥原因呢。
重点是,在win和mac中没问题,放centos和ubantu就出这个问题了。
APP_PATH
建议每次导入的时候,都把全路径打印到日志中。仔细对比失败时的路径。
一般这种情况,可能文件名称或者路径文件夹的大小写问题,这个比较常规出现。