尝试将多个图像上传到文件夹,请从下拉列表中进行选择。我设法使其完美工作,但突然间它停止工作。 move_uploaded_file()
函数返回false。我不知道为什么。我使用echo
打印出路径及其100%正确。我还检查了目标目录权限(设置为777)。
我不是php方面的专家,我遵循了多个教程和指南来提出以下代码。
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="css/component.css" />
<link rel="icon" href="/MobileApp/Portal/favicon.png">
<script>(function(e,t,n){var r=e.querySelectorAll("html")[0];r.className=r.className.replace(/(^|\s)no-js(\s|$)/,"$1js$2")})(document,window,0);</script>
<style type="text/css">
body{ font: 14px sans-serif; padding-left:15px; padding-top:15px; text-align: center;}
</style>
</head>
<body>
<?php
if(isset($_POST['submit']) & isset($_POST['s1'])){
$choice = $_POST['s1'];
$fixedPath = 'MobileApp/Images/';
$slash = "/";
// Count total files
$countfiles = count($_FILES['file']['name']);
// Looping all files
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];
$chosenPath = $fixedPath.$choice.$slash.$i;
//$chosenPath = $fixedPath.$choice.$slash.$filename;
echo $chosenPath;
// Upload file
if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $chosenPath)){
echo "Good";
}
else {
echo "bad";
echo $FILES['files']['error'];
}
//move_uploaded_file($_FILES['file'],$chosenPath/.$_FILES['tmp_name']);
}
}
else {
echo "Please choose a folder";
}
?>
<p>
<legend>Files Upload</legend>
<div class="box">
<form method='post' action='' enctype='multipart/form-data' style="text-align: center">
<input type="file" name="file[]" id="file" class="inputfile inputfile-1" data-multiple-caption="{count} files selected" multiple />
<label for="file">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
<path d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z" />
</svg>
<span>Choose a file…</span>
</label>
</div>
<input type='submit' name='submit' value='Upload' class="btn btn-warning" padding-top="15px" style="width:500px">
<BR>
<BR>
<fieldset>
<p>
<label>User's folder:</label>
<form method='post' action='' name='s1'>
<select name="s1" style="width:400px">
<option value="" selected="selected">-----</option>
<?php
foreach(glob(dirname( dirname( dirname( __FILE__ ) ) ) . DIRECTORY_SEPARATOR . 'Images' . DIRECTORY_SEPARATOR . '*') as $filename){
//foreach(glob(dirname(__FILE__) . '/MobileApp/Images/') as $filename){
$filename = basename($filename);
echo "<option value='" . $filename . "'>".$filename."</option>";
}
?>
</select>
</form>
</p>
</fieldset>
</form>
</p>
</body>
</html>
更新:
我已经对代码进行了一些调整,并将问题缩小到以下代码行:
move_uploaded_file($_FILES['file']['tmp_name'][i], $chosenPath)
但看不到我的问题。
答案 0 :(得分:0)
我认为这里唯一需要更改的地方
$chosenPath = $fixedPath.$choice.$slash.$filename;
代替
$chosenPath = $fixedPath.$choice.$slash.$i;
move_uploaded_file
的第二个参数应该是目标文件名。只有那一种改变对我有用。
您还需要提供root
目录中的目标目录路径,这意味着 $fixedPath = 'MobileApp/Images/';
应该是来自根目录的路径,例如 /var/www/html/../../MobileApp/Images/
(这只是您的实际目录路径可以不同的一个示例),请选中此link以查找目标目录的相对路径