2015-04-23 24 views
1

我可以從我的服務器上傳一個大文件到Google驅動器,但是當我從我的服務器上傳一個文件時,只要進程不能訪問我的網站沒有完成。你知道我能做些什麼嗎?上傳一個大的PHP文件到Google Drive

還有就是我對我的上傳腳本:

set_time_limit(0);      
$file = new Google_Service_Drive_DriveFile(); 
$file->title = "title"; 


$chunkSizeBytes = 1 * 1024 * 1024; 

// Call the API with the media upload, defer so it doesn't immediately return. 
$client->setDefer(true); 
$request = $service->files->insert($file); 

// Create a media file upload to represent our upload process. 
$media = new Google_Http_MediaFileUpload(
    $client, 
    $request, 
    mime_content_type($filePath), 
    null, 
    true, 
    $chunkSizeBytes 
); 
$media->setFileSize(exec('stat -c %s "'.$filePath.'"')); 
// Upload the various chunks. $status will be false until the process is 
// complete. 
$status = false; 
$handle = fopen($filePath, "rb"); 
while (!$status && !feof($handle)) { 
    $chunk = fread($handle, $chunkSizeBytes); 
    $status = $media->nextChunk($chunk); 
} 

// The final value of $status will be the data from the API for the object 
// that has been uploaded. 
$result = false; 
if($status != false) { 
    $result = $status;       

} 
+0

你得到什麼錯誤? –

+0

你的意思是網站不會加載? 「無法訪問」是什麼意思? –

+2

在上傳處理程序中嘗試'session_write_close()',假設您使用標準的基於文件的會話,這會在上載運行時鎖定會話? –

回答

1

這聽起來像什麼可能發生的事情是,你對谷歌驅動器連接可能被佔用的帶寬。即使您在專用服務器上,您的內部網絡連接可能會受到設計限制(許多連接具有10Mb連接),並且通常還受到防火牆限制,但有可能是這種情況。

雖然您的服務器本身可能只是最大限度地發送文件,但並不可能。

至於你可以做些什麼來解決這個問題。在PHP級別,我沒有意識到在套接字連接方面對數據包速率限制等方面的低級別控制。

如果你能夠實現一個帶寬限制連接,它可以爲你解決問題,但是如果失敗了,那麼總是存在「密集操作的計劃B」實際上是想訪問該網站,如果他們是,那麼你正在破壞最少的人。

另一種方法是使用某種形式的雲DNS系統與高速緩存等的CloudFlare這將讓你的內容被服務達人甚至在服務器片刻,這麼大的工作落下。

將兩者結合在一起,雖然服務器在上傳過程中停止響應,但很可能不被注意。它遠非完美的解決方案,而是圍繞可能無法解決的事情進行設計,這將是一個可靠的工作答案。

+1

謝謝你的回答,我將盡力找到解決方案 –

+0

一切順利。我很抱歉,我無法給你一個完美的解決方案。 –

0

如果我理解正確的話,你的問題是,你上傳驅動器被阻塞,直到它完成你不發送到瀏覽器的響應。如果是這樣的話,您需要將Drive上傳委派給一個單獨的線程,並讓主線程發送一個http響應並關閉。

+0

嗯,我不想發送迴應給用戶,這個網頁是隻爲我。但問題是,如果我想在我的服務器的另一個頁面上,我需要等待上傳完成...可能是因爲上傳佔用了所有帶寬?但奇怪的是,第一週我沒有這個問題,今天開始......我不知道爲什麼 –

+0

我真的懷疑它是帶寬,如果你在一個託管服務器上。如果您懷疑帶寬是一個問題,您可以簡單地切換到使用可恢復上傳塊。如果文件很大,無論如何你都應該使用可恢復的,所以chunking並不是一個額外的步驟。 – pinoyyid

+0

我正在使用塊,我有50MB的連接 –

相關問題