2015-04-23 26 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的连接 –

相关问题