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