2012-01-17 34 views
10

Trong PHP, tôi đang sử dụng tệp trong bộ nhớ (hoặc đúng hơn, tạm thời trong bộ nhớ) để tải hình ảnh từ URL bên ngoài vào tài nguyên GD:Cách xóa tệp khỏi php: // temp wrapper

$file = 'php://temp/img'; 
copy($uri, $file); 
$src_img = @imagecreatefromjpeg($file); 

Tuy nhiên, như tôi đã hiểu, tệp này vẫn còn trong bộ nhớ, mặc dù tôi không sử dụng nó sau imagecreatefromjpeg().

Có cách nào để giải phóng bộ nhớ được sử dụng bởi tệp php wrapper php: // temp không?

Hoặc tín hiệu ít nhất là tệp không còn được sử dụng nữa?

+1

Không chắc chắn điều này là có thể - tôi hy vọng nó là, có vẻ khá vô lý nếu nó không phải là. Tuy nhiên, một công việc tiềm năng xung quanh sẽ là sử dụng 'php: // maxmemory' để đặt một giá trị bộ nhớ rất thấp để dữ liệu sẽ luôn được ghi vào đĩa, giữ mức sử dụng bộ nhớ thấp. Mặc dù nếu bạn muốn làm điều đó bạn cũng có thể chỉ cần sử dụng một tập tin tạm thời, rendering toàn bộ 'php: // temp' điều vô nghĩa. – DaveRandom

Trả lời

5

Khi bạn tạo tệp trong php: // temp (hoặc php: // bộ nhớ cho vấn đề đó), tài nguyên chỉ kéo dài tuổi thọ của tập lệnh. Nếu bạn mở tệp bằng cách sử dụng fopen() để có được trình xử lý tài nguyên, tuổi thọ có thể được rút ngắn bằng cách sử dụng fclose($resource_handle).

Trong trường hợp của bạn, ngay sau khi tập lệnh của bạn được thực hiện xong, tệp sẽ không còn trong bộ nhớ nữa.

Trong trường hợp bạn muốn xóa bộ nhớ trước khi hoàn thành tập lệnh, tất cả những gì bạn phải làm là fclose() con trỏ tệp tài nguyên.

Trên ghi chú khác, /img bạn đang sử dụng không hợp lệ và đang bị bỏ qua. Dữ liệu được thêm vào chỉ được nhận dạng là /maxmemory:n.