我目前正在使用自动视频转换进行某种上传。目前,我正在上传完成后通过 php shell 命令执行 php 脚本,因此用户不必等到转换完成。像这样:
protected function _runConversionScript() {
if (!exec("php -f '" . $this->_conversionScript . "' > /dev/null &"))
return true;
return false;
}
现在在我的转换脚本文件中,我正在使用另一个类“UploadFunctions”中的函数来更新数据库中的状态(如启动、转换、完成......)。问题在于,这个 UploadFunctions 类继承自另一个类“Controller”,例如建立数据库连接。目前我正在使用 spl_autoloader 在特定目录中搜索所需文件(例如 controller.php),但由于转换脚本与整个自动加载器内容脱节,它无法识别 Controller 类并引发致命的 php 错误。以下是转换脚本中的一些代码:
require_once('uploadfunctions.php');
$upload_func = new UploadFunctions();
// we want to make sure we only process videos that haven't already
// been or are being processed
$where = array(
'status' => 'queued'
);
$videos = $upload_func->getVideos($where);
foreach ($videos as $video) {
// update database to show that these videos are being processed
$update = array(
'id' => $video['id'],
'status' => 'started'
);
// execute update
$upload_func->updateVideo($update);
.........
我这样做是完全错误的还是有更好的方法来做到这一点?如果您需要更多代码或信息,请告诉我!非常感谢
这是我的 spl_autoload 代码:
<?php
spl_autoload_register('autoloader');
function autoloader($class_name) {
$class_name = strtolower($class_name);
$pos = strpos($class_name ,'twig');
if($pos !== false){
return false;
}
$possibilities = array(
'..'.DIRECTORY_SEPARATOR.'globals'.DIRECTORY_SEPARATOR.$class_name.'.php',
'controller'.DIRECTORY_SEPARATOR.$class_name.'.php',
'..'.DIRECTORY_SEPARATOR.'libs'.DIRECTORY_SEPARATOR.$class_name.'.php',
'local'.DIRECTORY_SEPARATOR.$class_name.'.php'
);
foreach ($possibilities as $file) {
if(class_exists($class_name) != true) {
if (file_exists($file)) {
include_once($file);
}
}
}
}
?>
我将我的项目划分为代表功能的子文件夹,例如上传、我的帐户和图库.. 在每个子文件夹中还有 2 个其他文件夹:控制器和本地。控制器是控制这部分的类(例如上传),本地是我放置需要的本地类的文件夹。控制器类从位于子项目文件夹中的 index.php 中调用。“libs”和“global”只是项目范围的类,如数据库、用户等。这是我的文件夹结构的示例:
www/index.php // 主站点
www/upload/index.php // 调用控制器进行上传并初始化 spl_autoload
www/upload/controller/indexcontroller.php // 上传功能
www/upload/local/processVideo.php // 这是转换脚本。
我对 spl_autoload 函数相当陌生。在我看来,如果我的脚本正在调用 spl_autoload ,则不会调用:"php -f processVideo.php",不是吗?