0

好的,所以我为网站设置了一个上传引擎,以便经过身份验证的用户可以上传库中歌曲的音频文件(密钥),但是当我尝试上传任何超过 5MB 的文件时遇到了这个奇怪的问题。

顺便说一下,我将 php.ini 最大文件大小设置为 50MB

一切都正确上传,但没有与另一端的文件关联的数据。

HTML 代码:

<form action="keyUpload.php?id=<?php echo $id;?>" method="post" enctype="multipart/form-data">
<p style="color:#fff;font-size:30px;font-family:Times">
Add a new Key:<br/><input name="uploaded" type="file" id="file"><br />
<input type="text" name="kname" id="kname" value placeholder="Key Name (Ex. Demo, A#, etc.)" style="width:300px;"><br/>
<button class="button">Upload File</button><br/>
<span style="font-size:12px;">*Max Filesize is 50 MB*</span>
</p>
</form>

PHP代码:

<?php 
$id=$_GET["id"];
$name=$_POST["kname"];

$name = str_replace(" ","%20",$name);

$allowed_filetypes = array('.mp3','.m4a','.wav','.wma');

$filename = $_FILES['uploaded']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);

当我上传大于 5 MB 的文件时,$filename 和 $ext 都是空变量。在所有其他情况下,该引擎都可以完美运行。

回显时,根本没有任何反应,因此如果文件不存在,引擎显然不会保存文件。这是怎么回事?

var_dump:

array(0) { }

感谢你的帮助!

4

3 回答 3

3

检查上传错误:

if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['uploaded']['error']);
}

错误代码在这里定义:http ://www.php.net/manual/en/features.file-upload.errors.php

同样,不要使用文件名来验证上传。恶意用户伪造文件名并上传恶意文件并非易事,例如。

ren nastyvirus.exe good_tune.mp3

并且不要对文件名使用字符串操作。有一整套用于文件名操作的 PHP 函数,例如http://php.net/basename

于 2012-04-24T02:42:15.240 回答
0

也设置max_post_size在 php.ini 中。

于 2012-04-24T03:13:14.203 回答
0

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}

span {
  font-size:12px
}
    <form action="keyUpload.php" method="POST" enctype="multipart/form-data">
      Add a new Key:
      <input type="file" name="file" />
      <input type="submit" name="submit" value="Upload File" />
    </form>
    <span>*Max Filesize is 50 MB*</span>    
    <hr />
    <p>keyUpload.php</p>
    <iframe src="https://ideone.com/gKDwew"></iframe>

于 2017-11-18T05:28:32.787 回答