PHP fwrite将数据块写入视频文件
问题描述
我有一个非常大的视频文件,我在使用dropzone js将它按块发送,我可以看到块按正确的顺序发送到我的php代码中,我能够从第一个块创建文件,但当我尝试从其他块fwrite到文件时,什么都没有发生,我的视频文件大小为0字节,而我期望的大小是27.7MB,我做错了什么?
//Check if file exists
if(file_exists(uploadPath .uploadedFiles['videos']->getClientFilename())) {
//if yes, add onto the file
file = fopen(uploadPath . uploadedFiles['videos']->getClientFilename(), "w");
//chunk = fread(uploadedFiles['videos'], 1024);
fwrite(file, uploadedFiles['videos']->getStream()->getContents());
fclose(file);
}
else
{
//if no, create the file from first chunk
uploadedFiles['videos']->moveTo(uploadPath . $uploadedFiles['videos']->getClientFilename());
}
解决方案
你应该使用fopen
函数,指定模式为a
。
$file = fopen($uploadPath . $uploadedFiles['videos']->getClientFilename(), "a");
https://www.php.net/manual/en/function.fopen.php
模式 w
清除整个文件并设置新内容。模式 a
在末尾追加内容。