簡體   English   中英

為什么我的PHP文件上傳代碼不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM