我在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,还是在这里有更复杂的东西?
有谁可以解释我哪里出错?
谢谢!
答案 0 :(得分:1)
您无法使用“自定义”php.ini更改这些值,因为Web服务器通常不会读取这些值。虚空使用ini_set
,因为these directives属于PHP_INI_PERDIR
类型。
但是,有时您可以使用.htaccess
文件更改它们,并按照有关MAX_FILE_SIZE
输入的文档中的说明操作:
MAX_FILE_SIZE隐藏字段(以字节为单位)必须位于文件输入字段之前,其值是PHP接受的最大文件大小。应始终使用此表单元素,因为它可以节省用户等待传输大文件的麻烦,只是发现它太大而传输失败。
答案 1 :(得分:-1)
您可以使用之前使用文件上传功能来覆盖php.ini文件
ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);