Обслуживание изображений PHP, посторонние байты перед маркером - PullRequest
0 голосов
/ 07 ноября 2010

Я отчаянно пытаюсь решить это. У меня есть куча файлов, хранящихся вне webroot, и я должен передать их пользователю после нескольких проверок подлинности. Эти файлы были загружены с помощью приложения Flex или только что были вручную загружены через FTP. У меня есть сценарий обслуживания, который выглядит примерно так:

<?php

$filePath = '/for/demonstration/only.jpg';
...
$type = exif_imagetype($filePath);
$size = filesize($filePath);
if ($type && $size > 0) {
    switch($type)
    {
        case IMAGETYPE_PNG:
            header("Content-Type: image/png");
            break;
        case IMAGETYPE_JPEG:
            header("Content-Type: image/jpeg");
            break;
        default:
            header("Content-Type: text/plain");
            break;
    }
    header("Content-Length: {$size}");
    readfile($filePath);
    exit;
} else {
    echo 'error';
}

Довольно просто. Изображение, однако, где-то в процессе загрузки, Из-за процесса кодирования файл получил дополнительные 100-130B и теперь кажется поврежденным. Я получаю ошибку посторонние байты . Скрипт загрузки также довольно прост: Flex использует FileRefrence, чтобы пользователь выбрал файл, затем кодирует данные и отправляет их на серверный скрипт:

<?php
function fileupload($data)
{
    $daily_folder = 'today/';

    $fileName_clipped = substr( $fileName, 0, $max_file_len );
    $fileName_clipped = preg_replace('/\./','_',$fileName_clipped);
    $filePath = '/path/to/storage' . $daily_folder;

    if(!is_dir($filePath))
        mkdir($filePath);

    if( strlen($data->filedata) > 0 ) {
        if( !file_put_contents($filePath . $fileName_clipped, base64_decode($data->filedata)) )
            return false;
    } else {
        return false;
    }
}

Запуск процесса

файл A: 31 740 В, 31 848 В, 108 В дополнительно

файл B: 35 273 В, 31 403 В, 130 В дополнительно

Я полагаю, что это может быть на стороне Flash, но, честно говоря, это очень просто. Я просто не вижу, откуда поступают дополнительные данные и почему они повреждают файл. Кто-нибудь знает, почему это происходит? или еще лучше, как я могу очистить эти файлы сейчас?

1 Ответ

0 голосов
/ 07 ноября 2010

Вот сделка.Когда я сделал резервную копию всех изображений с одного сервера и переместил их на другой, я перенес все файлы на свой ноутбук с ОС Windows.Этот процесс, будь то из-за Windows или, возможно, FileZilla, повредил все файлы.добавив кучу мусора на них.Я бы вживую высказал мнение о том, что, по вашему мнению, вызвало проблему, но независимо от того, где я находил проблему и исправлял ее.

Решением было заархивировать родительский каталог на сервере и загрузить zip.Мне не нужно было изменять код.Простая процедура пересмотра.Как хромает.

...