私は現在、自動ビデオ変換を使用したある種のアップロードに取り組んでいます。現時点では、アップロードが完了した後、phpシェルコマンドを使用して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);
}
}
}
}
?>
プロジェクトをサブフォルダーに分割し、アップロード、myaccount、ギャラリーなどの機能を表します。すべてのサブフォルダーには、コントローラーとローカルの2つのフォルダーもあります。Controllerは、この部分を制御するクラス(たとえば、アップロード)であり、localは、必要なローカルクラスを配置するフォルダーです。コントローラクラスは、サブプロジェクトフォルダにある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関数にかなり慣れていません。私の意見では、スクリプトが「php -f processVideo.php」を呼び出している場合、spl_autoloadは呼び出されませんね。