[英]Why is my PHP file upload code not working?
我正在嘗試使用PHP制作一個簡單的文件上傳表單。 這是我的代碼:
<?php
$uploads_dir = '/uploads';
if(isset($_FILES['thefile'])){
$errors= array();
$file_name = $_FILES['thefile']['name'];
$file_size =$_FILES['thefile']['size'];
$file_tmp =$_FILES['thefile']['tmp_name'];
$file_type=$_FILES['thefile']['type'];
$tmp_name = $_FILES['thefile']["tmp_name"];
if($file_size > 2097152){
$errors[]='File size must be less than 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($tmp_name, "$uploads_dir/$file_name");
echo "Success";
}
else{
print_r($errors);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Simple File Upload</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="thefile" />
<input type="submit"/>
</form>
</body>
</html>
我意識到我並沒有限制文件類型,但是一旦我可以上傳一個簡單的.jpg或.zip文件,我就會擔心。 使用上面的代碼,我轉到位於以下位置的本地服務器上的頁面:
C:\wamp\www\simpleupload (this contains index.php, the file posted above)
當我選擇一個小的圖像文件並單擊提交時,出現以下錯誤:
警告:move_uploaded_file(/uploads/session_timeout_formatting_bug.png):無法打開流:第18行的C:\\ wamp \\ www \\ project_fileshare \\ index.php中沒有此類文件或目錄
和
警告:move_uploaded_file():無法在第18行的C:\\ wamp \\ www \\ project_fileshare \\ index.php中將'C:\\ wamp \\ tmp \\ phpEFDE.tmp'移動到'/uploads/session_timeout_formatting_bug.png'
第18行是調用move_uploaded_file()函數的行。
如何解決此錯誤? 我有一個'uploads_dir'文件夾,位於與index.php文件相同的文件夾中。 (請參考上面的文件路徑)。 我在這里做錯了什么? 我一定會誤解此過程的一小部分,並將目錄放在錯誤的位置,否則我在代碼中做錯了什么。
有人可以發現我的錯誤並告訴我該怎么做才能解決它?
您正在Windows上工作,並且已經告訴PHP無法訪問的位置(即/uploads
linux路徑)。
由於您在Windows中工作,並且文檔根目錄為C:\\wamp\\www\\simpleupload
也就是說,您的文件位於以下位置:
C:\\wamp\\www\\simpleupload\\index.php
(您的上傳腳本) C:\\wamp\\www\\simpleupload\\uploads
(文件應上傳到的位置) 為什么不使用這樣的絕對路徑:
$uploads_dir = getcwd() . DIRECTORY_SEPARATOR . 'uploads';
getcwd()函數將返回正在執行的PHP腳本的當前工作目錄(在您的情況下為index.php),因此$uploads_dir
如下所示: C:\\wamp\\www\\simpleupload\\uploads
嘗試這個。
如果您的上載目錄與index.php位於同一位置,請刪除$ uploads_dir變量中的“ /”。 這,或添加一個“。” 在斜線之前,因為現在它指的是根,而根可能是當前工作目錄之外的其他名稱。 說到魔鬼; http://php.net/manual/zh/function.getcwd.php
$uploads_dir = getcwd() . '\uploads';
$uploads_dir = __DIR__ . '\uploads'; #php > 5.6
另外,請檢查您的目錄是否可用於php: http : //php.net/manual/en/function.is-writable.php
還有Latheesan所說的,最好跨平台運行,因為我犯了相同的錯誤。
<?php
function buildPath(...$segments){
return join(DIRECTORY_SEPARATOR, $segments);
}
echo buildPath(__DIR__, 'uploads');
?>
我會改變
if(isset($_FILES['thefile'])){
為了這
if($_FILE['thefile']['error'] === UPLOAD_ERR_OK){
因為我認為這是了解用戶是否上傳文件或輸入為空的最佳方法。
要么
if (isset($_FILE["thefile"]["name"])){
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.