我的应用程序取决于其上传文件的能力。
然而,在我更改了PHP.init文件中的一些设置之后,我正在试验我的文件上传的一些问题。
首先是一些重要信息:
Apache
2.4 现在一切都始于我的客户无法将更大的文件上传到我的服务器上。所以我做的是更改php.ini
中的设置:
(请注意我在这里/etc/php5/apache2/php.ini
)
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 250M
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 500M
应用这些更改后,我调用了命令:sudo service apache2 restart
然后我尝试上传大小如下的文件:82.4 MB
public function uploadFile()
{
if ($this->isAjax()) {
$comp_id = $_POST['comp_id'];
$name = $_FILES['file1']['name'];
$name = substr($name, strpos($name, "."), strlen($name));
switch ($name) {
case '.jpg':
case '.png':
case '.jpeg':
case '.bmp':
case '.JPG':
case '.PNG':
case '.JPEG':
case '.BMP':
$_FILES['file1']["name"] = "image_file".$name;
break;
case '.MP4':
case '.mp4':
$_FILES['file1']["name"] = "mp4_file".$name;
break;
case '.FLV':
case '.flv':
$_FILES['file1']["name"] = "flv_file".$name;
break;
case '.MP3':
case '.mp3':
$_FILES['file1']["name"] = "sound_file".$name;
break;
case '.docx':
case '.txt':
case '.pdf':
case '.odt':
case '.DOCX':
case '.TXT':
case '.PDF':
case '.ODT':
$_FILES['file1']["name"] = "document_file".$name;
break;
default:
die("Unknown/not permitted file type");
}
$location = "./site/resources/upload/test_module/" . $comp_id . "/" . $_FILES['file1']["name"];
if (!file_exists("./site/resources/upload/test_module/" . $comp_id . "/")) {
mkdir("./site/resources/upload/test_module/" . $comp_id . "/", 0777, true);
}
move_uploaded_file($_FILES['file1']['tmp_name'],
$location);
chmod($location, 777);
$path = "/site/resources/upload/test_module/" . $comp_id . "/" . $_FILES['file1']["name"];
chmod($path, 777);
switch ($name) {
case '.jpg':
case '.png':
case '.jpeg':
case '.bmp':
case '.JPG':
case '.PNG':
case '.JPEG':
case '.BMP':
$this->getDatabase()->prepTemplate('UPDATE test_component SET image_path = ? WHERE id = ?', 'si', array($path, $comp_id));
break;
case '.MP4':
case '.mp4':
if ($_FILES['file1']['type'] != 'audio/mp3') {
$this->getDatabase()->prepTemplate('UPDATE test_component SET video_mp4_path = ? WHERE id = ?', 'si', array($path, $comp_id));
} else {
$this->getDatabase()->prepTemplate('UPDATE test_component SET sound_path = ? WHERE id = ?', 'si', array($path, $comp_id));
}
break;
case '.FLV':
case '.flv':
$this->getDatabase()->prepTemplate('UPDATE test_component SET video_flv_path = ? WHERE id = ?', 'si', array($path, $comp_id));
break;
case '.MP3':
case '.mp3':
$this->getDatabase()->prepTemplate('UPDATE test_component SET sound_path = ? WHERE id = ?', 'si', array($path, $comp_id));
break;
case '.docx':
case '.txt':
case '.pdf':
case '.odt':
case '.DOCX':
case '.TXT':
case '.PDF':
case '.ODT':
$this->getDatabase()->prepTemplate('UPDATE test_component SET text_path = ? WHERE id = ?', 'si', array($path, $comp_id));
break;
default:
die("Unknown/not permitted file type");
}
}
}
正如您在此功能中所看到的,我尝试设置文件夹和文件的权限,以确保我之后可以访问它们。
上传时我尝试按照流程进行操作,发现服务器上没有创建任何文件夹,也没有添加任何文件。
所以有些东西告诉我上传失败了。
直到我更改了php.ini中的设置我可以上传较小的文件,但是现在我甚至无法上传大小为4 MB
的文件。 (或任何其他文件)
上传在我的本地计算机上运行没有任何问题,但在我的服务器上没有。
有没有人在此之前对此进行过实验,或者对它可能是什么有所了解?
更新
添加错误打印后,我收到以下错误:
Warning: chmod(): No such file or directory in /var/www/test_learningbank/site/pages/models/TestMaker.php on line 263
Warning: chmod(): No such file or directory in /var/www/test_learningbank/site/pages/models/TestMaker.php on line 265
打印出来的文件给了我:
{"name":"Vaks-DCK.mp4","type":"","tmp_name":"","error":1,"size":0}
值得注意的是,error = 1且size = 0 ??