2012-02-15 31 views
5

Tôi có yêu cầu viết tệp như một phần của tập lệnh PHP (nội dung XML có đuôi tệp tùy chỉnh), sau đó một khi tệp đã được lưu để đính kèm vào một email, tôi sẽ gửi bằng cách sử dụng PHP Mailer.Ghi tệp vào các vị trí tạm thời

Phần gửi email là tốt nhưng tôi chưa bao giờ phải viết một tệp bằng PHP trước đây. Tệp chỉ được yêu cầu trong suốt thời gian của tập lệnh và không cần phải được giữ vĩnh viễn.

Tôi làm cách nào để ghi tệp vào vị trí tạm thời?

Tôi có cần dọn sạch vị trí tạm thời khi hoàn thành tệp không? Nếu vậy, làm thế nào?

Trả lời

4

chức năng tmpfile - Tạo một tập tin tạm thời

Tạo một tập tin tạm thời với một tên duy nhất trong read-write (w +) Chế độ và trả về một tập tin xử lý.

Tệp sẽ tự động bị xóa khi đóng (sử dụng fclose()) hoặc khi tập lệnh kết thúc.

PHP Manual: Filesystem

1

Nếu bạn chỉ cần nó để bạn có thể gắn nó vào một email, bạn không thực sự phải viết các tập tin. Chỉ cần:

$attachment=chunk_split(base64_encode($XML)) 
     $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 
     // put message body in mime boundries 
      $message = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
      $message . "\n\n"; 
     // attachment with mime 
     $message .= "--{$mime_boundary}\n" . 
      "Content-Type: {$type};\n" . 
      " name=\"{$name}\"\n" .  
      "Content-Transfer-Encoding: base64\n\n" . 
      $attachment. 
      "--{$mime_boundary}--\n"; 

chưa được kiểm tra, nhưng tôi đã làm điều gì đó giống như trước đây. (Tôi kéo nó ra khỏi tập lệnh mà tôi sử dụng để gửi bản sao lưu cho mình.)

15

Để tránh chu trình Ghi-Xóa-Xóa với tệp thực trên đĩa, tôi sẽ lưu tất cả dữ liệu "tệp" tạm thời của bạn được lưu trữ trong bộ nhớ sử dụng php được tích hợp sẵn php://tempphp://memoryIO stream wrappersdocs.

// open a temporary file handle in memory 
$tmp_handle = fopen('php://temp', 'r+'); 
fwrite($tmp_handle, 'my awesome text to be emailed'); 

// do some more stuff, then when you want the contents of your "file" 
rewind($tmp_handle); 
$file_contents = stream_get_contents($tmp_handle); 

// clean up your temporary storage handle 
fclose($tmp_handle); 

Bạn không bao giờ phải ghi hoặc xóa tệp vào đĩa. Ngoài ra, lưu ý sự khác biệt giữa việc sử dụng php://tempphp://memory từ các tài liệu về chủ đề này:

php: // bộ nhớ và php: // tạm được đọc-ghi dòng cho phép dữ liệu tạm thời được lưu trữ trong một tập tin giống như wrapper. Chỉ có khác biệt giữa hai bộ nhớ là bộ nhớ php: // sẽ luôn lưu trữ dữ liệu trong bộ nhớ, trong khi đó php: // tạm thời sẽ sử dụng tệp tạm thời khi số lượng dữ liệu được lưu trữ đạt đến giới hạn được xác định trước (mặc định là 2 MB). Vị trí của tệp tạm thời này được xác định theo cùng cách với hàm hàm sys_get_temp_dir().

+0

Tính năng này có an toàn nhị phân không? Tôi có nghĩa là nó bằng cách mở một tập tin tạm thời với chế độ '" w + b "'? Nguyên nhân im làm việc với hàng trăm dữ liệu đa byte và an toàn di động và nhị phân là điểm chính. – TechJS

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