Sprintf hata ile sorun S3-> NesneKopyala () ve onlara ile% dosya adlarını kullanarak

0 Cevap php

Ben Amazon S3 dosyaları yönetmek için PHP S3.PHP sınıfını kullanıyorum. Ben S3 kova dosyaları kopyalamak için NesneKopyala () işlevini kullanın. (Ben her şeyi zaten UrlEncode) urlencoded gereken dosya adlarını karşılayacak kadar tüm harika çalışıyor. Bir dosya içinde% karakterleri ile biter zaman NesneKopyala () işlevi kukla tükürür.

Örneğin - NesneKopyala geçirilen zaman dosya 63037_Copy% 287% 29ofDSC_1337.JPG aşağıdaki hatayı atar () -

Warning:  sprintf() [<a href='function.sprintf'>function.sprintf</a>]: Too few arguments in ..... S3.php on line 477

İşte NesneKopyala fonksiyon hattı 477 bulunuyor

public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
    $rest = new S3Request('PUT', $bucket, $uri);
    $rest->setHeader('Content-Length', 0);
    foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v);
    foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
    $rest->setAmzHeader('x-amz-acl', $acl);
    $rest->setAmzHeader('x-amz-copy-source', sprintf('/%s/%s', $srcBucket, $srcUri));
    if (sizeof($requestHeaders) > 0 || sizeof($metaHeaders) > 0)
        $rest->setAmzHeader('x-amz-metadata-directive', 'REPLACE');
    $rest = $rest->getResponse();
    if ($rest->error === false && $rest->code !== 200)
        $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
    if ($rest->error !== false) {
-------------------------------------------- LINE 477 ----------------------------


        **trigger_error(sprintf("S3::copyObject({$srcBucket}, {$srcUri}, {$bucket}, {$uri}): [%s] %s",
        $rest->error['code'], $rest->error['message']), E_USER_WARNING);**


-------------------------------------------- LINE 477 ----------------------------

        return false;
    }
    return isset($rest->body->LastModified, $rest->body->ETag) ? array(
        'time' => strtotime((string)$rest->body->LastModified),
        'hash' => substr((string)$rest->body->ETag, 1, -1)
    ) : false;
}

Herkes önce bu geldi? Orada urlencoded zaman değişmez dosya adlarını kullanırken kesinlikle hiçbir sorun olduğunu ve Ive zaten dosya gelen tüm boşlukları kaldırarak çalıştım ama alışkanlık burada örnekte sorun parantez gibi, tüm karakterleri yakalamak mümkün. Ve ben mümkün olduğunca orijinal yakın olarak dosya adlarını tutmak istediğiniz gibi zaten bu yolda gitmek istemiyorum.

teşekkürler çocuklar

0 Cevap