2012-02-01 26 views
13

Tôi đang sử dụng tệp văn bản thuần túy trong tập lệnh PhP. Có cách nào để xử lý tệp trong tập lệnh PhP mà không lưu tệp cục bộ không? Ở khắp mọi nơi tôi thấy chỉ cần tải lên một tập tin và lưu nó. Tôi chỉ cần kéo một số tên ra khỏi tập tin và được thực hiện với nó. Tôi có mọi thứ khác hoạt động nếu tôi sử dụng một bản sao cục bộ của tập tin, do đó, lưu nó, sau đó xóa nó hoạt động. Tôi đã tự hỏi liệu có cách nào để bỏ qua việc lưu bản sao và chỉ nhận thông tin đó trực tiếp không.Tải lên FILE POST của php mà không lưu

Chúng tôi tải tệp lên đây.

<html> 
<body> 
    <form action="test.php" method="post" enctype="multipart/form-data"> 
     <label for="file">Filename:</label><input type="file" name="file" id="file" /> <br /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 

và trong kịch bản làm việc với một bản sao của tập tin lưu cục bộ, tôi chỉ cần sử dụng

$file = fopen($_FILES['file']['name'], "r"); 

Trả lời

14

Nếu tập tin văn bản của nó (giả sử kích thước không phải là rất lớn) thường bạn có thể đọc nó bằng cách

$contents= file_get_contents($_FILES['file']['tmp_name']); 

Nếu bạn không chắc chắn loại hình tải lên đó là, kiểm tra phương pháp reuest

if(strtolower($_SERVER['REQUEST_METHOD'])=='post') 
    $contents= file_get_contents($_FILES['file']['tmp_name']); 
elseif(strtolower($_SERVER['REQUEST_METHOD'])=='put') 
    $contents= file_get_contents("php://input"); 
else 
    $contents=""; 
+3

Tình trạng có vẻ giống nhau, tôi cho rằng lần thứ hai bạn có nghĩa là strtolower ($ _ SERVER ['REQUEST_METHOD']) == 'đặt' – netadictos

0

không nó sẽ phải được lưu vào được đọc afaik, bình thường thói quen của tôi cũng giống như của bạn, tải lên, đọc và xóa.

0

Bạn chỉ có thể sử dụng $_FILES["file"]["tmp_name"] sẽ là tệp tạm thời đã được tải lên. Một khi kịch bản của bạn được thực hiện chạy, PHP thậm chí nên dọn dẹp sau khi chính nó và xóa các tập tin tạm thời.

3

Khi biểu mẫu được gửi, hãy kiểm tra thuộc tính $_FILES['input_name']['tmp_name']. Đây là đường dẫn đến tệp của bạn được lưu trong đường dẫn hệ thống tạm thời /tmp. Bạn có thể tiếp tục đọc tên bằng cách sử dụng, ví dụ: file_get_contents() và sau đó chỉ cần quên tệp. Hệ thống sẽ xử lý việc xóa nó.


Chỉ cần để nổi bật trong những câu trả lời khác, bạn có lý thuyết có thể đọc các tập tin mà không cần tải nó sử dụng JavaScript, xem http://www.html5rocks.com/en/tutorials/file/dndfiles/. Sau đó, chỉ gửi dữ liệu bạn cần như một phần của yêu cầu AJAX.

1

Khi bạn tải tệp lên, trước khi bạn lưu tệp cục bộ, tệp được lưu vào tệp tạm thời. Các vị trí đều có thể được truy cập bằng cách:

$_FILES['uploadedfile']['tmp_name'] 

Bạn có thể chọn không lưu các tập tin và fopen() các tập tin tạm thời, miễn là bạn làm điều này trong kịch bản tương tự mà recieves các POST.

3

Tệp phải được lưu ở đâu đó trước khi đọc trong trường hợp này là thư mục tạm thời; Bạn có thể lấy nội dung của tệp từ thư mục tạm thời, sau đó nếu bạn thực sự cần xóa. Xem đoạn mã sau:

$file = file_get_contents($_FILES["ufiley"]["tmp_name"]); 

unlink($_FILES["ufiley"]["tmp_name"]); 

//contents would be stored in $file 
+4

Không cần phải 'bỏ liên kết() 'tệp tạm thời AFAIK khi PHP tự động thực hiện điều này khi tập lệnh kết thúc. –

+0

@George Vâng. Đó là vì mục đích rõ ràng. – Mob

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