2016-09-02 3 views
0

Ich habe die Google Drive-APIs in PHP verwendet, um Dateien von meinem Server auf Google Drive mit einem Cron-Job hochzuladen. Bis jetzt hat alles gut funktioniert.Google Drive php uploads bricht

Was ich festgestellt habe, ist, dass, wenn es eine Datei um 30mb gibt und wenn das Skript diese Datei erreicht, es bricht. Ich benutze ein Dienstkonto. Gibt es eine Grenze für die Größe des Datei-Uploads?

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

Bitte geben Sie den Code, der möglicherweise defekt ist/Probleme haben, damit wir Ihnen beim Debuggen helfen können, in den Fragen aktuellen Zustand, wir können/wollen Ihnen nicht helfen. – zanderwar

+0

Ich denke, es hängt vom Dateityp ab, welche Größe es Docs kann ich glaube, kann etwa 50 MB zum Beispiel sein. Solange Sie den wiederaufsetzbaren Upload verwenden, sollte dies kein Problem darstellen. was @Zanderwar sagte, zeige deinen Code. – DaImTo

+0

Könnte auch sein 'memory_limit' oder max Ausführungszeit (php.ini) – zanderwar

Antwort

0

Wie in Ihren Kommentaren diskutiert und in meiner Erfahrung dies in der Regel durch eine von zwei Dingen gelöst:

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; } 

Als @KojoNkrumah up bringt, ist es viel vorteilhafter und viel sicherer ist Verwenden Sie resumable uploads und laden Sie > 10MB Dateien in Chunks

+1

Vielen Dank. Ich habe fortsetzbare Uploads verwendet und sie haben gut funktioniert –