这让我发疯了。也许有人可以看到我能做的事情并让我开心。
我有一个带有两个上传按钮的表单。它需要这样(客户要求)。
<fieldset>
<legend>SUBIR DOCUMENTOS </legend>
<span class="help-block">Aquí solo tienes que subir los documentos NO relacionados con un contrato. </span>
<div class="form-group">
<label for="inputFile1"> Documento A </label>
<input type="file" id="inputFile1" name="inputFile1">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />
</div>
<div class="form-group">
<label for="inputFile2"> Documento B </label>
<input type="file" id="inputFile2" name="inputFile2">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />
</div>
</fieldset>
除了第二个文件(inputFile2)超过最大大小时的错误消息,每个东西都能正常工作。在这种情况下,文件不会上传(正确),但会显示成功消息。
以下是代码:
include_once ('includes/functions.php');
if(!empty($_FILES)) {
$message_error = array();
$message_success = array();
foreach($_FILES as $file){
$file_name = $file['name'];
$file_temp_name = $file['tmp_name'];
$file_type = $file['type'];
$file_size = $file['size'];
$server_file= EGAR_UPLOADPATH . basename($file_name);
$ext = pathinfo($server_file,PATHINFO_EXTENSION);
$path_parts = pathinfo($file_name);
$allowedExtensions = array("pdf","doc","docx","rtf","txt", "gif", "png", "jpg", "jpeg");
if (!empty($file['name'])){
//move the file to the server
if ((in_array( $ext,$allowedExtensions)) && ($file_size <= EGAR_MAXFILESIZE)){
$server_file= EGAR_UPLOADPATH . $file_name; ///public_html/test-site-6/uploads
move_uploaded_file($file_temp_name,$server_file);
$success_upload= "$file_name subido correctamente";
array_push($message_success,$success_upload);
}else{
if($file_size > EGAR_MAXFILESIZE) {//1mb
$filesize= "es demasiado grande (máximo 1MB) ";
$error_upload ="$file_name $filesize <br/>";
array_push($message_error,$error_upload);
}
if(!in_array( $ext,$allowedExtensions)) {
$filetype=" es un tipo de archivo no válido";
$error_upload ="$file_name $filetype <br/>";
array_push($message_error,$error_upload);
}
}
}//if empty
}//end foreach
foreach($message_error as $msg) {
echo '<h3 class="error">'. $msg . '</h3>';
}
foreach($message_success as $msg) {
echo '<h3 class="success">'. $msg . '</h3>';
}
}
非常感谢任何帮助。
答案 0 :(得分:1)
max_upload_size和max_post_size指令位于php.ini中。将它们更改为所需的值并重新启动apache。请参阅此帖子:Stackoverflow Question
即使失败,您的成功消息也会发生,因为成功条件只是文件具有名称且具有适当的扩展名。测试条件应为:
if( move_uploaded_file($file_temp_name,$server_file) ){
$success_upload = 'blah';
}
答案 1 :(得分:1)
感谢大家,但你的建议没有用。你所说的一切都有道理,但它没有解决问题。最后,我意识到问题不是在PHP中,而是在HTLM中。
我正在使用一个隐藏的&#34; MAX_FILE_SIZE&#34;每个文件的输入,它只应该是整个表格的一个。
使用以下新代码,它就像魅力一样。
<div class="col-lg-12">
<div class="well ">
<fieldset>
<legend>SUBIR DOCUMENTOS </legend>
<span class="help-block">Aquí solo tienes que subir los documentos NO relacionados con un contrato. </span>
<div class="form-group">
<label for="inputFile1"> Documento A </label>
<input type="file" id="inputFile1" name="inputFile1">
</div>
<div class="form-group">
<label for="inputFile2"> Documento B </label>
<input type="file" id="inputFile2" name="inputFile2">
</div>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo EGAR_MAXFILESIZE; ?>" />
</fieldset>
</div>
</div>
</div><!--outer-->