2014-01-22 53 views
2

我試圖將文件保存在我的服務器上。它適用於小文件,但不適用於大文件。file_get_contents('php:// input');返回空字符串與大文件

在JavaScript中,我發送文件用XMLHttpRequest如下

var ajax = new XMLHttpRequest(); 
ajax.open('POST', configuration.backend + 'ajax/uploadVideo', true); 
ajax.setRequestHeader('X-File-Name', input.files[0].name); 
ajax.setRequestHeader('X-File-Size', input.files[0].size); 
ajax.send(input.files[0]); 

在PHP這個腳本保存輸入到硬盤:

$filename = $_SERVER['HTTP_X_FILE_NAME']; 
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); 
$new_filename = uniqid().'.'.$extension; 
$fh = fopen(DOCROOT.'/public/videos/'.$new_filename, 'w'); 
fwrite($fh, file_get_contents('php://input')); 
fclose($fh); 

的腳本工作完美地與較小的文件,但不是較大的。它只是創建一個0字節的文件。 (8.7MB不工作,而5.7MB工作)。我沒有得到任何PHP錯誤。錯誤報告級別爲E_ALL & ~E_DEPRECATED

我也試過增加post_max_size,upload_max_filesizememory_limit的值,但沒有任何改變產生任何效果。

+1

請原諒我提出這樣一個明顯的問題,但是您是否在更改php.ini後重新啓動了Apache? –

+1

我沒有看到任何'file_get_contents',但我看到一個'file_put_contents'。 「放」是問題,是的? – Ohgodwhy

+0

那麼,他的上傳,而不是下載,我認爲... –

回答

1

剛發現錯誤。在php.ini(不只是ini_set()),而不是upload_max_filesize更改爲post_max_size

-1

後一些快速尋找,看看這個其他協議棧回答出:

Changing upload_max_filesize on PHP

相信您需要調整您的上傳大小在php.ini並重新啓動Apache,函數ini_set()不能用來改變所有的PHP設置。

+0

正確,'upload_max_filesize'是'PHP_INI_PERDIR'可改變的,但鏈接到另一個SO問題/答案,因爲你的答案並不酷。將此問題標記爲重複而不是 – Phil

+0

對不起,我是這個網站的新手,我不知道我可以這樣做。我的錯。 –