2013-04-19 9 views
5

Próbuję odczytać z opakowania php://memory przy użyciu fread(), ale fread() zawsze zwraca wartość false. Mój kod jest uproszczona:Dlaczego czytanie z php: // opakowania pamięci, które właśnie napisałem, aby się nie powieść?

$file_handle = fopen('php://memory', 'w+'); // Have tried php:temp also. 
fwrite($file_handle, 'contents'); 
$file = fread($file_handle, filesize($file_handle)); // Have also tried 99999 for filesize. 

$file zawsze jest fałszywe po fread().

Co się dzieje?

Z góry dziękuję!

Odpowiedz

10

Musisz tyłu ($ file_handle) po napisaniu, zanim będzie można odczytać, co właśnie napisane, bo pisanie przesuwa wskaźnik pliku na końcu pliku

+0

Ahhh, że mnie pokonać w 33 sekund! – jimmy

0

Powinieneś być coraz to:

Uwaga: Wielkość pliku() oczekuje parametr 1 za sznurek, zasobów podane

I to są the first problem:

int filesize (string $filename) -   Pobiera rozmiar dla danego pliku.

... a druga: nie włączono zgłaszania błędów.

Trzeci problem polega na tym, że wskaźnik znajduje się na końcu pliku. Spróbuj czegoś takiego:

error_reporting(E_ALL); 
ini_set('display_errors', true); 
// ... 

rewind($file_handle); 
$file = ''; // 
while (!feof($file_handle)) { 
    $file .= fread($file_handle, 8192); 
} 
+0

Ahh tak, masz rację, filesize() oczekuje nazwy pliku, w moim oryginalnym kodzie użyłem strlen(). I znowu masz rację, muszę przewijać()! – jimmy

0

połączeń rewind($file_handle) przed fread()

+0

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/17554346) –

Powiązane problemy