mat*_*thy 4 php linux windows automation file
我有很多功能和课程,我已经包含在我的网站上.在stackoverflow的帮助下,我收到了一个自动包含文件夹及其子文件夹中所有文件的脚本:PHP:Automatic Include
在测试脚本时,它始终有效,我从来没有遇到任何问题.但是最近从Windows服务器切换到Linux服务器时,它会产生类扩展的问题.
PHP致命错误:在第3行的路径/函数/类/ Acumulus/AcumulusExportWorkshop.php中找不到类'AcumulusExportBase',引用:pagesite /?page_id = 346
AcumulusExportWorkshop从AcumulusExportBase扩展而来.这一切都完全适用于Windows,但拒绝在Linux上工作.
我可以解决这个问题,创建一个include_once'AcumulusExportBase.php'; 但如果有一个更好的解决方案,那么这一切似乎都是不必要的,并且正在努力.
我使用的代码如下:
load_folder(dirname(__FILE__));
function load_folder($dir, $ext = '.php') {
if (substr($dir, -1) != '/') { $dir = "$dir/"; }
if($dh = opendir($dir)) {
$files = array();
$inner_files = array();
while($file = readdir($dh)) {
if($file != "." and $file != ".." and $file[0] != '.') {
if(is_dir($dir . $file)) {
$inner_files = load_folder($dir . $file);
if(is_array($inner_files)) $files = array_merge($files, $inner_files);
} else {
array_push($files, $dir . $file);
}
}
}
closedir($dh);
foreach ($files as $file) {
if (is_file($file) and file_exists($file)) {
$lenght = strlen($ext);
if (substr($file, -$lenght) == $ext && $file != 'loader.php') { require_once($file); }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,如何扩展类和Linux没有问题吗?还有一个问题的解决方案,而不必手动包括基类?
其他两个答案都是正确的(我已经对它们进行了投票).您的问题将是文件加载的顺序(请参阅Mark的响应),并且递归也是错误的(请参阅KIKO).
但是,有一种更好的方法可以做你想要的:使用自动加载器.http://php.net/manual/en/language.oop5.autoload.php
第一次令人困惑,但一旦你掌握了它,它是一种加载文件的可爱方式.
基本上你说"如果我需要X类并且它没有加载,那么加载文件Y.php".
如果你是超级懒惰并且不想指定每个类,那么你可以说"如果我需要X类并且它没有被加载,运行目录结构寻找一个被调用的文件X.php并加载它,我的类将是在那里." 你可以混合上面的内容来做到这一点.
这样,您可以先加载AcumulusExportWorkshop,然后查找AcumulusExportBase并快乐地运行.
更有益的是,您只需加载您需要的东西.如果你从不需要这个类,它永远不会被加载.
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |