我正在尝试上传视频并使用zend框架在php中转换它,我的逻辑有点问题。
我有一个本地目录,需要保存上传的文件:
C:/xampp/htdocs/zend/videos/
我需要转换视频,然后将其移动到该目录中。
使用以下内容进行转换:
exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $out);
这是我表格的一部分:
$file = new Zend_Form_Element_File('file');
$file->setLabel('File')
->setRequired(true)
//->setDestination('/var/www/tmp') use in real life
->setDestination('C:/xampp/htdocs/zend/tmp')
->addValidator('Size',
false,
array('min' => '10kB', 'max' => '100MB'));
当我上传文件时,它会很好地进入该目录。
我是否需要转换tmp
目录中的文件,然后将其移至我的另一个主文件中,然后删除原始文件?
是否有办法暂时将原始文件保存在临时目录中,直到它被转换,然后它会自动删除自己?
我也尝试使用Zend_File_Transfer_Adapter_Http
,但有点混淆setDestination
和来自target
过滤器的Rename
之间的差异,如果有的话需要使用它。
我回家有人可以为这个问题带来一些启示,也许是一些最佳实践。
由于
答案 0 :(得分:0)
不推荐使用我也尝试使用 Zend_File_Transfer_Adapter_Http 但是我有点 混淆 setDestination 和。之间的区别 来自重命名过滤器的目标,如果需要使用它。
setDestination()
,而应使用Rename
过滤器。如果您设置了Rename
过滤器,它将覆盖目标。否则,没有太大的区别。主要区别在于Rename
过滤器可以重命名文件,其中setDestination
保留原始文件名,就像在用户的PC上一样,只将其移动到目的地。如果您不仔细命名,可能会导致现有文件被覆盖或者某人粉碎其他用户的文件。
我是否需要转换 tmp 目录中的文件,然后将其移至 我的另一个主要的,然后删除原来的那个?
就个人而言,我不会尝试在上传时转换文件。虽然在许多情况下转换可能很快,但如果上传了相对较大的视频并且视频编码需要额外的4分钟,会发生什么?您不希望用户在那里等待转发发生时发生的事情。
我会上传文件,将它们复制到临时位置,然后将它们转换为原始位置。这当然增加了复杂性。
如果你想在上传时动态转换视频,我甚至可能根本不会使用Zend_File_Transfer_Adapter_Http
。相反,使用$_FILES
超全局访问$_FILES['videofile']['tmp_name']
并让ffmpeg
转换该文件,只将输出写入最终目标或临时目标,然后在转换完成时移动它。上传到PHP的文件会在请求终止时自动删除,除非您调用move_uploaded_file
或手动执行某些操作将临时文件写入永久位置。
是否有办法将原始文件保存在临时目录中 临时直到它被转换然后它会自动 删除自己?
是的,如果没有Zend_File_Transfer
。上传的文件自动进入临时目录,直到PHP请求终止。如果您动态进行转换,则PHP完成时会自动删除原始临时文件。
希望能为你解决一些问题。