不知道为什么在上传大文件的时候如果文件大小超过了我设置的最大值就会出现POST数组为空的情况 本来应该只是显示提示说文件太大了,但是却成了提示$POST里的是空的.
我已经在php.ini里把各种max和memory设置成很大的值了。。所以应该不会是php.ini设置问题,因为如果我把大小比较那行代码去掉就可以运行<?php
session_start();
include_once("classe/image.php");
include_once("mysql_connect.php");
$message = NULL; if(isset($_POST["anti_multipl"]))
{
if($_SESSION["anti_multipl"]==$_POST["anti_multipl"])
{
if(isset($_FILES["new_file"]))
{
if($_FILES['new_file']['size'] <= $_SESSION["maxUpload"])//文件大小要限制
{
if($_FILES["new_file"]["error"]==0)
{
//防止重复的名字,给新文件重命名
$path="uploaded/".$_SESSION["userName"]."/";
$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;
$file_name = $i>0?substr($_FILES["new_file"]["name"], 0, $i-1 ):$_FILES["new_file"]["name"];
$file_type = strrchr($_FILES["new_file"]["name"],'.');
$query = "SELECT f_name FROM uploaded WHERE (f_name LIKE '{$file_name}(%)%' OR f_name = '{$_FILES['new_file']['name']}') AND client_id= {$_SESSION['userID']};";
$result = mysql_query($query);
if(mysql_num_rows($result)>=1)
{
$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;
$_FILES["new_file"]["name"] = $file_name."(".(mysql_num_rows($result)).")".$file_type;
}
//插入文件
$query = "INSERT INTO uploaded(client_id, f_name, f_path, f_size, f_timestamp, f_desc) VALUES({$_SESSION['userID']}, '{$_FILES['new_file']['name']}', '{$path}', {$_FILES['new_file']['size']}, now(), '{$_POST['desc']}');";
mysql_query("START TRANSACTION;");
if(mysql_query($query))
{
if(move_uploaded_file($_FILES["new_file"]["tmp_name"], $path.$_FILES["new_file"]["name"]))
{
mysql_query("COMMIT;");
$message = "OK";
}
else
{
mysql_query("ROLLBACK;");
$message = "Deplacement de ficher erreur: \nverifiz bien le nom de votre fichier s'il contient des caracteres specieux";
}
}
else
{
mysql_query("ROLLBACK;");
$message .= "insertion fichier erreur:".mysql_error();
}
}
else
{
$message .= "Upload file error:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "文件大于 ".$_SESSION["maxUpload"]/1024/1024 ."Mb";
}
}
else
{
$message .= "文件无法上传:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "Anti miltible dosent correct";
//header("LOCATION:mySpace.php");//si l'utilisateur essaie de valider XX fois la fromule
}
}
else
{
$message .= "The anti multipl isn't in '$_POST': " .count($_POST);//如果文件太大这里就会是0
}
$_SESSION["anti_multipl"] = mt_rand(0,999999999);
session_write_close();
?>
<script type="text/javascript">
window.top.window.uploadEnd("<?php echo $message; ?>");
</script>
//////////////////---------------我是分割君-----------------------/////////////////还有一个问题就是.....突然想不起来了等想起来再说
我已经在php.ini里把各种max和memory设置成很大的值了。。所以应该不会是php.ini设置问题,因为如果我把大小比较那行代码去掉就可以运行<?php
session_start();
include_once("classe/image.php");
include_once("mysql_connect.php");
$message = NULL; if(isset($_POST["anti_multipl"]))
{
if($_SESSION["anti_multipl"]==$_POST["anti_multipl"])
{
if(isset($_FILES["new_file"]))
{
if($_FILES['new_file']['size'] <= $_SESSION["maxUpload"])//文件大小要限制
{
if($_FILES["new_file"]["error"]==0)
{
//防止重复的名字,给新文件重命名
$path="uploaded/".$_SESSION["userName"]."/";
$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;
$file_name = $i>0?substr($_FILES["new_file"]["name"], 0, $i-1 ):$_FILES["new_file"]["name"];
$file_type = strrchr($_FILES["new_file"]["name"],'.');
$query = "SELECT f_name FROM uploaded WHERE (f_name LIKE '{$file_name}(%)%' OR f_name = '{$_FILES['new_file']['name']}') AND client_id= {$_SESSION['userID']};";
$result = mysql_query($query);
if(mysql_num_rows($result)>=1)
{
$i= strlen($_FILES["new_file"]["name"]);
while($_FILES["new_file"]["name"][$i-1] != '.' && $i!=0)
$i--;
$_FILES["new_file"]["name"] = $file_name."(".(mysql_num_rows($result)).")".$file_type;
}
//插入文件
$query = "INSERT INTO uploaded(client_id, f_name, f_path, f_size, f_timestamp, f_desc) VALUES({$_SESSION['userID']}, '{$_FILES['new_file']['name']}', '{$path}', {$_FILES['new_file']['size']}, now(), '{$_POST['desc']}');";
mysql_query("START TRANSACTION;");
if(mysql_query($query))
{
if(move_uploaded_file($_FILES["new_file"]["tmp_name"], $path.$_FILES["new_file"]["name"]))
{
mysql_query("COMMIT;");
$message = "OK";
}
else
{
mysql_query("ROLLBACK;");
$message = "Deplacement de ficher erreur: \nverifiz bien le nom de votre fichier s'il contient des caracteres specieux";
}
}
else
{
mysql_query("ROLLBACK;");
$message .= "insertion fichier erreur:".mysql_error();
}
}
else
{
$message .= "Upload file error:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "文件大于 ".$_SESSION["maxUpload"]/1024/1024 ."Mb";
}
}
else
{
$message .= "文件无法上传:".$_FILES["new_file"]["error"];
}
}
else
{
$message .= "Anti miltible dosent correct";
//header("LOCATION:mySpace.php");//si l'utilisateur essaie de valider XX fois la fromule
}
}
else
{
$message .= "The anti multipl isn't in '$_POST': " .count($_POST);//如果文件太大这里就会是0
}
$_SESSION["anti_multipl"] = mt_rand(0,999999999);
session_write_close();
?>
<script type="text/javascript">
window.top.window.uploadEnd("<?php echo $message; ?>");
</script>
//////////////////---------------我是分割君-----------------------/////////////////还有一个问题就是.....突然想不起来了等想起来再说
$_POST没有值。是你的文件大小超过了post_max_size的值了把。
但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.
这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time在php.ini里查找
max_execution_time
默认是30秒.改为
max_execution_time = 0
0表示没有限制另一种方法是可以在php程序中加入
set_time_limit();
来设定页面最久执行时间.
set_time_limit(0);//0表示没有限制2.其次修改数据包的最大限制修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
查找 post_max_size .改为
post_max_size = 150M3. 最好修改上传文件的最大限制很多人都会改了第二步.但上传文件时最大仍然为 2M.
为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
查找upload_max_filesize,默认为8M改为
upload_max_filesize = 100M另外要说明的是,post_max_size 大于 upload_max_filesize 为佳
所以应该不会超过设置大小,但是post数组里却是空的
<form method="POST" enctype="multipart/form-data" action="mySpace_addFile.php" target="frameForUpdate">
Upload a new file:<input type="file" id="file" name="new_file" /></br>
<textarea rows="4" cols="60" name="desc" value=""></textarea>
</br>
<input type="submit" id="submit" value="Add new file"/>
<input type="hidden" name="anti_multipl" id="anti_multipl" value="<?php echo $_SESSION["anti_multipl"]; ?>"/>
</form>
</fieldset>
<iframe name="frameForUpdate" id="frameForUpdate"></iframe>
http://index.php?a=x&b=y&c=z
怎么样才能做到直接替换地址里的参数呢?
我用string的replace正则表达式好像是错的
url.replace(/a=.*[&]?/,"c");
url = 'http://index.php?a=x&b=y&c=z';
url = url.replace(/(a=).*?(&|$)/,"$1c$2");
alert(url);
</script>
那么它会返回 错误代码 1 ,也就是上传超过了 upload_max_filesize 值 ,这样post接收值也没问题例子2:
假如你上传的文件是280M 你设置 upload_max_filesize = 200M post_max_size=250M
超过了post接收的值,那么post和files 文件接收都会返回空数组 ,错误代码 是 0 ,数据上传成功.因为数据位空没有内容 所以就显示 0 了,好神奇那么就只有把 post_max_size 设置的足够大,不然别人上传个大型文件,那不就是说error判断是无效的吗、、、
不知道这算不算bug 、、、、
我也是碰到了这问题
post 总是大于 upload 的 ,因为表单中还有其他信息