2013-09-21 73 views
24

Tôi đang làm việc trên một trang web và tôi muốn người dùng có thể tải lên các tệp. Vì vậy, tôi đang cố gắng tìm hiểu làm thế nào để làm điều đó. Tôi đã nghiên cứu và nói rằng tôi đã phải sử dụng hàm move_uploaded_file(). Tôi đã viết mã giống như nó đã được trên ví dụ (thay đổi dữ liệu), nhưng nó sẽ không hoạt động. Xin hãy giúp tôi, tôi mới ở đây. Dưới đây là những gì tôi đã làm như vậy cho đến nay:Chức năng Move_uploaded_file() không hoạt động

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
<body> 
    <form action="upload_file.php" method="POST" enctype="multipart/form-data"> 
     <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
     <input type="file"name="file"> 
     <input type="submit"> 
    </form> 
</body> 
<html> 

Đây là upload_file.php:

<!DOCTYPE html> 
<html> 
    <head> 
    <head> 
    <body> 
     <?php 
      $move = "/Users/George/Desktop/uploads/"; 
      echo $_FILES["file"]['name']."<br>"; 
      echo $_FILES["file"]['tmp_name']."<br>"; 
      echo $_FILES["file"]['size']."<br>"; 
      echo $_FILES['file']['error']."<br>"; 
      move_uploaded_file($_FILES['file']['name'], $move); 
     ?> 
    <body> 
<html> 
+0

Bạn có thể giải thích 'nhưng nó sẽ không hoạt động'? –

+0

Tôi không nhận được thông báo lỗi nhưng tệp không được lưu như tôi muốn. – user2480054

+0

Giải pháp mà tất cả mọi người đang đăng trên sổ tay, bạn có kiểm tra ở đó không? http://php.net/manual/en/function.move-uploaded-file.php – elclanrs

Trả lời

28

tập tin sẽ được lưu trữ tại địa điểm tạm thời, sử dụng tmp_name thay vì tên

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) { 
    echo "Uploaded"; 
} else { 
    echo "File was not uploaded"; 
} 
+0

Vẫn không hoạt động. Nhưng cảm ơn. – user2480054

+0

Bạn cũng nên kiểm tra giá trị trả lại của hàm. Điều gì về quyền truy cập thư mục cho điểm đến của bạn? –

+2

Vâng, đường dẫn đích của bạn không chứa tên tệp ... – elclanrs

11

Đây là ví dụ hoạt động.

Form HTML:

<form enctype="multipart/form-data" action="upload.php" method="POST"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" /> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="submit" value="Send File" /> 
</form> 

PHP Code:

<?php 

    $uploaddir = '/var/www/uploads/'; 
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

    echo "<p>"; 

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
     echo "File is valid, and was successfully uploaded.\n"; 
    } else { 
     echo "Upload failed"; 
    } 

    echo "</p>"; 
    echo '<pre>'; 
    echo 'Here is some more debugging info:'; 
    print_r($_FILES); 
    print "</pre>"; 

    ?> 
1

nó nên như thế này

move_uploaded_file($_FILES['file']['tmp_name'], $move); 

Và bạn không thể di chuyển nó bất cứ nơi nào trong hệ thống của bạn .youcan di chuyển nó chỉ trong thư mục dự án của bạn phải nằm trong htdocs hoặc www phụ thuộc vào những gì bạn đang sử dụng wampp, lampp hoặc vertrgo.

+0

Tôi đang sử dụng mamp và tôi đã thử với tài liệu nhưng nó vẫn không hoạt động. Cảm ơn bạn. – user2480054

5
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name']; 

Đó là một.

move_uploaded_file($_FILES['file']['tmp_name'], $move); 

Đó là hai.

Kiểm tra xem thư mục uploads có thể ghi

Đó là ba.

Return Values ​​

Returns TRUE trên thành công.

Nếu tên tệp không phải là tệp tải lên hợp lệ, thì sẽ không có hành động nào xảy ra và move_uploaded_file() sẽ trả về FALSE.

Nếu tên tệp là tệp tải lên hợp lệ nhưng không thể di chuyển vì một số lý do , sẽ không có hành động nào xảy ra và move_uploaded_file() sẽ trả lại FALSE. Ngoài ra, một cảnh báo sẽ được phát hành.

Nhìn vào giá trị trả lại của hàm.

Vậy đó.

+0

Bạn đã đúng. Cảm ơn bạn! – user2480054

2

thử này

$ImageName = $_FILES['file']['name']; 
$fileElementName = 'file'; 
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
1

Bạn chưa đề cập đến các tạm thời vị trí nơi các tập tin được lưu.

Sử dụng tmp_name để truy cập tệp.

Bạn luôn có thể xem những gì đang bị được thông báo bằng:

echo "<pre>"; 
print_r($_FILES); 

Nếu bạn thấy tập tin này mảng bạn sẽ có một sự hiểu biết tốt hơn và ý tưởng về những gì đang xảy ra.

+0

Vậy nếu print_r ($ _ FILES) in ra một mảng trống thì sao? Tôi đã làm giống như OP. – Lewistrick

+1

@Lewistrick nó có nghĩa là bạn có thể quên đề cập đến thuộc tính mã hóa của biểu mẫu. Tham khảo câu hỏi này: http://stackoverflow.com/questions/3586919/why-would-files-be-empty-when-uploading-files-to-php – shivgre

7

Thử sử dụng chức năng copy() thay vì move_uploaded_file(). Nó đã hoạt động cho tôi.

copy($_FILES['file']['tmp_name'], $path); 
+0

Với tôi nữa. Cảm ơn. –

3

có thể bạn cần cấp thêm quyền cho tệp của mình.

giả mã của bạn dưới/var/www/my_project

thử chmod -R 777 /var/www/my_project

+3

Tôi ** mạnh mẽ ** đề nghị bạn nhận thức được những rủi ro bảo mật ở đây. Nếu bạn thực sự cần phải làm điều này, hãy thêm php vào nhóm sở hữu thư mục đó và sử dụng '664' thay vì' 777' – Jacksonkr

1

viết bài này snipped mà tôi đã viết để nếu ai đó đến đây muốn upload nhiều file sẽ không trở về trắng tay . :) Tập lệnh này không thực hiện bất kỳ xác thực nào. Nó chỉ tải lên thẳng. Vui lòng tùy chỉnh mã cơ bản này theo nhu cầu của bạn.

MẪU HTML

<form action="upload_file.php" method="POST" enctype="multipart/form-data"> 
    Select images: <input type="file" name="files[]" multiple> 
    <input type="submit"> 
</form> 

upload_file.php

$move = "\uploads"; 
foreach ($_FILES["files"]["tmp_name"] as $key => $value) 
{ 
    $tmp_name = $_FILES["files"]["tmp_name"][$key]; 
    $name = $move ."\\".basename($_FILES["files"]["name"][$key]); 
    move_uploaded_file($tmp_name, $name); 
} 
0

Nếu bạn đang ở trên một máy cửa sổ, sẽ không có bất kỳ vấn đề với tải lên hoặc ghi vào thư mục quy định đường dẫn, ngoại trừ các lỗi cú pháp.

Nhưng trong trường hợp người dùng Linux, có một giải pháp cho vấn đề này, ngay cả khi không có lỗi cú pháp nào hiển thị.

Trước hết, tôi giả định rằng bạn đang sử dụng điều này trong môi trường Linux và bạn cần tải lên một thứ gì đó vào thư mục dự án của mình trong thư mục công cộng.

Ngay cả khi bạn đang có quyền ghi và đọc quyền truy cập vào thư mục dự án, PHP không được người dùng cuối xử lý. Đó là và có thể được xử lý bởi một người dùng hoặc nhóm www-data.

Vì vậy, để thực hiện việc này www-data, hãy truy cập loại đầu tiên;

sudo chgrp "www-data" your_project_folder 

sau khi hoàn thành, nếu không có quyền ghi vào thông tin sau;

sudo chown g+w your_project_folder 

Điều đó sẽ thực hiện thủ thuật trong Linux.

Xin vui lòng, không phải điều này được thực hiện trong môi trường Linux, với phpmyadmin và mysql đang chạy.

Các vấn đề liên quan