2017-10-19 2 views
0

Ich habe eine große Anzahl von Image-Dateien auf meinem Server (ca. 900.000), und ich verwende Azure Client Library für PHP, um eine Schleife und lade meine Dateien in Azure Blob Storage hoch. Mein Upload-Skript lief ungefähr 2 Tage lang gut und stoppte dann plötzlich und gab einen Fehler aus."Anforderung Datum Header zu alt" Fehler beim Hochladen großer Anzahl von Dateien in Blob Speicher

Oct 19 01:28:14 ik1-315-17878 php: PHP Fatal error: Uncaught exception 'MicrosoftAzure\Storage\Common\Exceptions\ServiceException' with message 'Fail:#012Code: 403#012Value: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.#012details (if any): AuthenticationFailed Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.#012RequestId:e7f247d6-001e-0022-142e-48abcc000000#012Time:2017-10-18T16:28:14.4980791ZRequest date header too old: 'Wed, 18 Oct 2017 16:12:27 GMT'.' in /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php:486#012Stack trace:#012#0 /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php(404): MicrosoftAzure\Storage\Common\Internal\ServiceRestProxy::throwIfError(Object(GuzzleHttp\Psr7\Respon in /home/t-matsumoto/GAZOU/vendor/microsoft/azure-storage/src/Common/Internal/ServiceRestProxy.php on line 486

Ich habe über die Ursache gesucht, und es ist wahrscheinlich, da Zeitstempel, wenn mein Skript diese Anforderung zu Zeitstempel Vergleich zu alt gemacht war, als Azure die Anforderung erhalten. Laut der obigen Fehlermeldung ist die Zeit der Anfrage "Mi, 18 Okt 2017 16:12:27 GMT", und die Zeit für den Empfang der Anfrage ist "2017-10-18T16: 28: 14.4980791Z" (ca. 15 Minuten Verspätung) . Aber was ich immer noch nicht verstehe ist, warum mein Skript eine Weile ohne Fehler gelaufen ist, und dann ist der Fehler plötzlich aufgetreten. Kann mir jemand dieses Phänomen und diese Lösung erklären, damit mein Skript ohne Fehler stabil läuft?

Mein PHP-Skript sieht aus wie unten

require_once 'vendor/autoload.php'; 

    use MicrosoftAzure\Storage\Common\ServicesBuilder; 
    use MicrosoftAzure\Storage\Common\ServiceException; 

    $connectionString = "DefaultEndpointsProtocol=http;AccountName=<accountNameHere>;AccountKey=<accountKeyHere>"; 

    // Create blob REST proxy. 
    $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString); 

foreach ($myListFiles as $filename) { 
    $content = fopen($filename, "r"); 
    $blob_name = "myblob"; 

    //Upload blob 
    $blobRestProxy->createBlockBlob("mycontainer", $blob_name, $content); 
} 

ich von diesem Link Beispielskript wurde das Hochladen https://docs.microsoft.com/en-us/azure/storage/blobs/storage-php-how-to-use-blobs

Antwort

0

denke ich @Gaurav Mantri Ihre Frage beantwortet hat:

Azure storage error using Python SDK


Da Sie jedoch eine große Anzahl von Bilddateien auf den Azure-Speicher hochladen müssen, würde ich Ihnen empfehlen, AzCopy zu verwenden. AzCopy ist ein Befehlszeilendienstprogramm, das zum Kopieren von Daten in und aus Microsoft Azure Blob-, Datei- und Tabellenspeicher mithilfe einfacher Befehle mit optimaler Leistung entwickelt wurde.

+0

Ich habe den Artikel gelesen, den Sie geteilt haben, aber es hilft mir immer noch nicht, meinen Fall zu erklären. Warum der Fehler nicht zuerst aufgetreten ist und passiert ist, als das Skript eine Weile lief. Ist das Hochladen einer großen Anzahl von Dateien der Punkt, der zu einer zeitlichen Verzögerung zwischen meinem Server und Azure führte? – leomidu

Verwandte Themen