[英]Cant upload a file using PHP?
有人可以看一下我的代碼嗎? 人們可以單擊“上傳”按鈕上傳一些文件,並且代碼應將其移動到新位置並保存。 我通過上傳圖像文件進行了測試,但在指定的文件夾中找不到該文件。 我確定目錄是正確的,因為我使用的目錄是folder,它可以導致我要放入的文件夾。因為下面的目錄具有我的名字,所以我改用“ 1”。 先感謝您!
我根據答案更改了代碼,但仍給我返回錯誤:警告:move_uploaded_file(/Users/angeloliao/Documents/Screen.tiff):無法打開流:/ usr / local / zend / apache2 / htdocs中的權限被拒絕/JuvoliciousProductViewer/5.php在第16行
警告:move_uploaded_file():無法將/ usr / local / zend / apache2 / htdocs / JuvoliciousProductViewer / 5中的'/ usr / local / zend / tmp / phpdfCRD3'移動到'/Users/angeloliao/Documents/Screen.tiff'。第16行的php
我試圖在終端上使用以下命令更改文件夾的權限:sudo chown -R 0755 / Users / angeloliao / Documents。 跑了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form enctype="multipart/form-data" method="POST">
<input type="file" name="file" />
<input type="submit" name="submit" value="upload" />
</form>
<?php
if ($_FILES) {
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$dir = "/Users/angeloliao/Documents/";
if (move_uploaded_file($temp,$dir.$name)) {
echo "File is valid, and was successfully uploaded.\n";
}
} else {
echo "Possible file upload attack!\n";
}
?>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form enctype="multipart/form-data" method="POST">
<input type="file" name="file" />
<input type="submit" name="submit" value="upload" />
</form>
<?php
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$dir = "/Users/1/Documents/";
move_uploaded_file($temp,$dir.$name);
?>
</body>
應該是_而不是+,目錄應該是帶有斜線的“ Documents /”
根據PHP文檔 ,臨時名稱位於$_FILES['file']['tmp_name']
而非$_FILES['file']['tmp+name']
。 另外,執行$dir.$name
的var_dump()
。 如果您上傳的文件是“ image.jpg”,那么它將是/Users/1/Documentsimage.jpg
。 注意缺少的斜杠。
更改此設置將使您的代碼正常工作,但仍不能處理所有可能的錯誤,也不安全! 上載可能會失敗。 如果這樣做,您會在$_FILES['file']['error']
找到錯誤代碼( 文檔中有列出所有參考的參考 )。 在移動臨時文件之前,您應該檢查上載是否成功(如果提交了表單,還應該只執行move命令)。
此外,使用上傳者提供的名稱並不安全。 考慮$_FILE['file']['name']
為../../../usr/local/bin/php
。 然后,上傳程序可以用惡意可執行文件替換您的PHP解釋器。 這很危險! 永遠不要相信用戶的輸入! 在這種情況下,最佳做法是隨機生成一個文件名,該文件名不依賴於原始文件名(即,不要僅散列提供的文件名,因為如果兩個人上傳同名文件怎么辦?)。
if($_POST['submit'] === 'upload') { // only process form if it has been submitted
if($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
exit('There was an error uploading your file');
}
$uploads_dir = '/Users/1/Documents/';
$upload_name = sha1(mt_rand().microtime(true)); // you should actually pick
// something more unique
// (collisions are possible)
move_uploaded_file($FILES['file']['tmp_name'], $uploads_dir . $upload_name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.