我在PHP中有一个文件上传脚本。该脚本适用于较小(小于2MB)的文件,但需要使用该脚本上传的较大文件(大约20MB)不会上传。上传文件时出现奇怪的错误 - 我认为它与最大文件大小有关
的脚本如下,则更多的解释算账:
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$file = $_FILES["uploaddistance"]["name"];
$fileTmpLoc = $_FILES["uploaddistance"]["tmp_name"];
$pathlevel3 = 'distance/level3/';
$pathlevel4 = 'distance/level4/';
$pathlevel5 = 'distance/level5/';
$pathlevel6 = 'distance/level6/';
$level = $_POST['distancecourse'];
$module = $_POST['distancemodule'];
$kaboom = explode(".", $file);
$extension = end($kaboom);
if ($level == "level3"){
$pathandname = $pathlevel3 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level4"){
$pathandname = $pathlevel4 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level5"){
$pathandname = $pathlevel5 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level6"){
$pathandname = $pathlevel6 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else {
echo "Error 1";
echo $level;
echo $module;
}
}
else {
echo "error 2";
}
?>
当我上传大文件时,“错误1”消息出现,表明没有POST值被传递给脚本。就像我说的,上传较小的文件时情况并非如此。
我试过创建一个自定义的php.ini文件并更改最大文件大小。我做了以下更改:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 96M
php.ini文件位于我的主目录(public_html)中。据我了解,这应该自动被目录内的任何脚本使用。当我在网站上运行phpinfo()
测试时,它表示加载的配置文件是public_html/php.ini(详情请参阅http://www.xenonacademy.org.uk/phptest.php),这表明配置文件是正确的,但由于某些原因,问题仍然存在。
此外,运行此测试时,它显示memory_limit
只是64M,而不是我在php.ini中指定的96,但upload_max_filesize
和post_max_size
是正确的。如果这些设置正确,为什么这不起作用?我是否需要在相关脚本中使用include()
我的php.ini,或者在这里工作时是否有更复杂的东西?
任何人都可以解释我要去哪里错了吗?
谢谢!
重新启动Apache/PHP? 'upload_max_filesize'可能需要这个才能获取。 – ficuscr 2013-02-20 18:16:29
您是否收到内存限制错误或脚本是否只是超时?增加最大执行时间。你遇到了什么错误? – ficuscr 2013-02-20 18:22:25
我得到的唯一错误是来自我自己的错误处理的'错误1',所以它看起来没有任何POST数据传递给脚本。这只发生在较大的文件上。 – Chris 2013-02-20 19:45:40