2016-09-02 17 views
0

私はcronジョブを使用して私のサーバからgoogleドライブにファイルをアップロードするためにphpのgoogleドライブAPIを使用しています。今まではすべてうまくいきました。Google drive php uploads breaks

私が気づいたことは、約30MBのファイルがあり、スクリプトがこのファイルに到達すると、ファイルが破損することです。私はサービスアカウントを使用しています。ファイルのアップロードサイズに制限はありますか?

if(is_dir($dir)) { 
$objects = scandir($dir); 

$files_with_sizes = array(); 
foreach($objects as $item) { 
    if($item != "." && $item != "..") { 
     $files_with_sizes[$item] = filesize($dir . '/' . $item); 
    } 
} 
asort($files_with_sizes); 
$folderId = insertFile($drive, "Backups_" . $_SERVER['HTTP_HOST'] . '_' . date("Y-m-d H:i:s") . "_" . time(), 'Folder for backup', null, "application/vnd.google-apps.folder", "")->getId(); 
insertPermission($drive, $folderId, "[email protected]", "user", "reader"); 
foreach ($files_with_sizes as $name => $object) { 
    if ($object != "." && $object != "..") { 
     $fileId = insertFile($drive, $name, $name, $folderId, "text/plain", $dir . '/' . $name)->getId(); 
    } 
} 
} 

function insertFile($service, $title, $description, $parentId, $mimeType, $filename) { 
$file = new Google_Service_Drive_DriveFile(); 
$file->setTitle($title); 
$file->setDescription($description); 
$file->setMimeType($mimeType); 

// Set the parent folder. 
if ($parentId != null) { 
    $parent = new Google_Service_Drive_ParentReference(); 
    $parent->setId($parentId); 
    $file->setParents(array($parent)); 
} 

try { 
    if(is_file($filename)) { 
     $data = file_get_contents($filename); 

     $createdFile = $service->files->insert($file, array(
      'data' => $data, 
      'mimeType' => $mimeType, 
      'uploadType' => 'multipart', 
     )); 
    } else { 
     $createdFile = $service->files->insert($file, array(
      'mimeType' => $mimeType, 
     )); 
    } 

    // Uncomment the following line to print the File ID 
    // print 'File ID: %s' % $createdFile->getId(); 

    return $createdFile; 
} catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
} 
} 

function insertPermission($service, $fileId, $value, $type, $role) { 
$newPermission = new Google_Service_Drive_Permission(); 
$newPermission->setValue($value); 
$newPermission->setType($type); 
$newPermission->setRole($role); 
try { 
    return $service->permissions->insert($fileId, $newPermission); 
} catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
} 
return NULL; 
} 
+0

デバッグに役立つように、問題が発生する可能性のあるコードを入力してください。現在の質問では、サポートできません。 – zanderwar

+0

私はそれがファイルサイズに依存していると思います。 Resumableアップロードを使用している限り、問題はないはずです。 @ Zanderwarがあなたのコードを示してくれたもの。 – DaImTo

+0

また、あなたの 'memory_limit'または最大実行時間(php.ini) – zanderwar

答えて

0

あなたのコメントで述べたように、そして私の経験では、これは通常の2つのいずれかによって解決される:@KojoNkrumahが起動しますと、それははるかに有利であるとする多くのより安全な

ini_set('memory_limit','125M'); // Memory limit is always a scary thing to touch, don't run out of it ;) 
// --- and/or --- 
set_time_limit(0) // Again, use with caution because an infinite loop could be painful: while (1) { continue; } 

resumable uploadsを使用し、> 10MB個のファイルをチャンクでアップロードしてください

+1

ありがとう非常に。再開可能なアップロードを使用して正常に動作しました –

関連する問題