上传的文件太大 php
uploaded file is too big php
您好,我有以下代码可以将视频上传到服务器并相应地更新数据库。当我 运行 它带有一堆图像和/或小视频时,这段代码工作正常。请参阅下面的代码:
for ($i=0; $i<count($_FILES['images']['error']); $i++) {
if ($_FILES['images']['error'][$i] == UPLOAD_ERR_OK) {
$tmpName = $_FILES['images']['tmp_name'][$i];
$name = $_FILES['images']['name'][$i];
$type = $_FILES['images']['type'][$i];
if (strpos($type, 'image') !== false) {
$type = "img";
}elseif(strpos($type, 'video') !== false){
$type = "vid";
}else{
exit();
}
move_uploaded_file(($tmpName), $dir.$name);
$upload = array(
'name'=>$name,
'type'=>$type
);
$uploads[] = $upload;
}
}
但是当我的客户端尝试上传大于 64mb 的视频时,程序不会上传它...我已经尝试更改 max_file_size 和其他参数以允许更大的文件。但我的客户托管服务提供商不允许这样做。
还有其他方法可以通过我的自定义 cms 将大文件上传到我的服务器吗?
托马斯
正如评论中所说。参考 material 下面是代码示例。技巧是将文件切成小于上传限制的块。此方法可以扩展到这样的程度,即当文件上传中断时,您可以继续上次已知的部分。 :-)
基本 JavaScript class 协助上传文件,确定要发送到 PHP 服务器的块。
function fileUploader() {
// Called when the file is selected
this.onFileSelected = function() {
// Read file input (input type="file")
this.file = this.fileInput.files[0];
this.file_size = this.file.size;
this.chunk_size = (1024 * 1000);
this.range_start = 0;
this.range_end = this.chunk_size;
this.slice_method = 'slice';
this.request = new XMLHttpRequest();
// Start uploading
this.upload();
};
this.upload = function()
{
var self = this,
chunk;
// Last part reached
if (this.range_end > this.file_size) {
this.range_end = this.file_size;
}
// Chunk the file using the slice method
chunk = this.file[this.slice_method](this.range_start, this.range_end);
// Open a XMLHttpRequest
var endpoint = "/url/to/php/server/for/processing";
this.request.open('PUT', (endpoint));
this.request.overrideMimeType('application/octet-stream');
this.request.send(chunk);
// Make sure we do it synchronously to prevent data corruption
this.request.onreadystatechange = function()
{
if (self.request.readyState == XMLHttpRequest.DONE && self.request.status == 200) {
self.onChunkComplete();
}
}
};
this.onChunkComplete = function()
{
if (this.range_end === this.file_size)
{
// We are done, stop uploading
return;
}
this.range_start = this.range_end;
this.range_end = this.range_start + this.chunk_size;
this.upload();
};
}
对于 PHP 位:
...
$out = fopen("{$filePath}.partial", "a+");
fwrite($out, file_get_contents("php://input"));
fclose($out);
...
这里大警告,确保正确验证并采取安全措施以确保您的客户端上传功能的安全。您正在将原始 PHP 输入写入文件。
上传完成后,您可以将文件重命名为原始名称,包括正确的扩展名。
引用material:
http://creativejs.com/tutorials/advanced-uploading-techniques-part-1/index.html
https://secure.php.net/manual/en/wrappers.php.php
简而言之.. 它使用处理器将文件分成小块,使用常规方法上传文件(就像您通常上传文件一样),将输入附加到临时文件。我遇到的一些陷阱是向端点发送额外的参数等,避免这些,因为它附加到文件,它会破坏你的文件。
您好,我有以下代码可以将视频上传到服务器并相应地更新数据库。当我 运行 它带有一堆图像和/或小视频时,这段代码工作正常。请参阅下面的代码:
for ($i=0; $i<count($_FILES['images']['error']); $i++) {
if ($_FILES['images']['error'][$i] == UPLOAD_ERR_OK) {
$tmpName = $_FILES['images']['tmp_name'][$i];
$name = $_FILES['images']['name'][$i];
$type = $_FILES['images']['type'][$i];
if (strpos($type, 'image') !== false) {
$type = "img";
}elseif(strpos($type, 'video') !== false){
$type = "vid";
}else{
exit();
}
move_uploaded_file(($tmpName), $dir.$name);
$upload = array(
'name'=>$name,
'type'=>$type
);
$uploads[] = $upload;
}
}
但是当我的客户端尝试上传大于 64mb 的视频时,程序不会上传它...我已经尝试更改 max_file_size 和其他参数以允许更大的文件。但我的客户托管服务提供商不允许这样做。
还有其他方法可以通过我的自定义 cms 将大文件上传到我的服务器吗?
托马斯
正如评论中所说。参考 material 下面是代码示例。技巧是将文件切成小于上传限制的块。此方法可以扩展到这样的程度,即当文件上传中断时,您可以继续上次已知的部分。 :-)
基本 JavaScript class 协助上传文件,确定要发送到 PHP 服务器的块。
function fileUploader() {
// Called when the file is selected
this.onFileSelected = function() {
// Read file input (input type="file")
this.file = this.fileInput.files[0];
this.file_size = this.file.size;
this.chunk_size = (1024 * 1000);
this.range_start = 0;
this.range_end = this.chunk_size;
this.slice_method = 'slice';
this.request = new XMLHttpRequest();
// Start uploading
this.upload();
};
this.upload = function()
{
var self = this,
chunk;
// Last part reached
if (this.range_end > this.file_size) {
this.range_end = this.file_size;
}
// Chunk the file using the slice method
chunk = this.file[this.slice_method](this.range_start, this.range_end);
// Open a XMLHttpRequest
var endpoint = "/url/to/php/server/for/processing";
this.request.open('PUT', (endpoint));
this.request.overrideMimeType('application/octet-stream');
this.request.send(chunk);
// Make sure we do it synchronously to prevent data corruption
this.request.onreadystatechange = function()
{
if (self.request.readyState == XMLHttpRequest.DONE && self.request.status == 200) {
self.onChunkComplete();
}
}
};
this.onChunkComplete = function()
{
if (this.range_end === this.file_size)
{
// We are done, stop uploading
return;
}
this.range_start = this.range_end;
this.range_end = this.range_start + this.chunk_size;
this.upload();
};
}
对于 PHP 位:
...
$out = fopen("{$filePath}.partial", "a+");
fwrite($out, file_get_contents("php://input"));
fclose($out);
...
这里大警告,确保正确验证并采取安全措施以确保您的客户端上传功能的安全。您正在将原始 PHP 输入写入文件。
上传完成后,您可以将文件重命名为原始名称,包括正确的扩展名。
引用material:
http://creativejs.com/tutorials/advanced-uploading-techniques-part-1/index.html
https://secure.php.net/manual/en/wrappers.php.php
简而言之.. 它使用处理器将文件分成小块,使用常规方法上传文件(就像您通常上传文件一样),将输入附加到临时文件。我遇到的一些陷阱是向端点发送额外的参数等,避免这些,因为它附加到文件,它会破坏你的文件。