【发布时间】:2020-06-29 02:52:42
【问题描述】:
我在 Ubuntu 16.04.4 LTS (Xenial Xerus) 上使用 PHP 版本 7.0.32-0ubuntu0.16.04.1。我正在使用以下代码上传文件。
<form action="https://myWebSite.com/uploadLibraryFile.php" method="post" enctype="multipart/form-data">
<label for="file" style="font-size:5mm; font-family:times-new-roman">Select library file:</label>
<input type="file" name="file[]" id="file" accept=".cdf,.CDF" /></br>
<input type="submit" name="submit[]" value="submit" />
<input type="hidden" id="LoggedIn" name="LoggedIn" value="<?php echo $_SESSION['LoggedIn'] ?>">
<input type="hidden" id="UserName" name="UserName" value="<?php echo $_SESSION['UserName'] ?>">
</form>
uploadLibraryFile.php 格式如下。
<?php
error_reporting(E_ALL);
session_start(); // This MUST be used to allow session variables to perist on next page.
?>
<html>
<header>
</header>
<body>
<?php
$target_dir = "../librarydropbox/";
// session_start();
$_SESSION['LoggedIn']=$_POST["LoggedIn"];
$_SESSION['UserName']=$_POST["UserName"];
// Ensure user is logged in
if (!isset($_SESSION['LoggedIn']) || !$_SESSION['LoggedIn']) {
?>
<script type="text/javascript">
alert("Session login not set")
</script>
<?php
header("Location: otherPage.php");
}
// Process file
$target_file = $target_dir . basename($_FILES["file"]["name"][0]);
echo "_FILES: " . print_r($_FILES["file"]) . "<br>";
echo "_FILES[tmp_name]: " . print_r($_FILES["file"]["tmp_name"]) . "<br>";
echo "_FILES[name][0]: " . print_r($_FILES["file"]["name"][0]) . "<br>";
echo "_FILES[name][0]: " . $_FILES["file"]["name"][0] . "<br>";
$src = $_FILES["file"]["name"][0];
echo "Src: " . $src . "<br>";
echo "Dst: " . $target_file . "<br>";
echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "<br>";
if (move_uploaded_file( $src, $target_file))
echo "The file ". basename( $_FILES["file"]["name"][0]). " has been uploaded.";
else
echo "Not uploaded because of error #" . print_r($_FILES["file"]["error"]);
?>
</body>
</html>
我得到的输出如下。
Array ( [name] => Array ( [0] => temp.cdf ) [type] => Array ( [0] => application/octet-stream ) [tmp_name] => Array ( [0] => /tmp/phpaBSrgR ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 14 ) ) _FILES: 1
Array ( [0] => /tmp/phpaBSrgR ) _FILES[tmp_name]: 1
temp.cdf_FILES[name][0]: 1
_FILES[name][0]: temp.cdf
Src: temp.cdf
Dst: ../librarydropbox/temp.cdf
upload_max_filesize = 200M
Array ( [0] => 0 ) Not uploaded because of error #1
我的理解是错误1表示上传的文件超出了php.ini中的upload_max_filesize指令。但是,我检查了 php.ini,upload_max_filesize 是 200M。 temp.cdf的大小为1KB,是一个由以下文本组成的ASCII文件。
minimal text
【问题讨论】:
-
您在此处的标题之前输出。
-
我添加了一个标题,并相应地编辑了我的问题,但没有任何区别。谢谢,
-
你能用ini_get检查upload_max_filesize,也许它的值是从200M改变的吗?
-
嗨@Joni。我试过了(并相应地更新了问题)。 upload_max_filesize 仍然是 200M。谢谢,
-
我不是这个意思。 “在标头之前输出”意味着在会话开始之前不应该有任何 HTML。启用错误报告,你就会明白我的意思了。
标签: php html session file-upload