PHP图像服务,标记之前的无关字节

时间:2010-11-07 16:15:33

标签: php flex file-upload

我拼命想要解决这个问题。我有一堆文件存储在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,740B in,31,848B out,108B extra

文件B:35,273B in,31,403B out,130B extra

我想这可能是在Flash方面,但老实说这很简单。我只是没有看到额外数据的来源,以及为什么它会破坏文件。任何人都知道为什么会这样吗?或者更好的是,我现在如何清理这些文件?

1 个答案:

答案 0 :(得分:0)

这是故事。当我从一台服务器备份所有图像并将它们移动到另一台服务器时,我将所有文件FTP到我的Windows笔记本电脑上。无论是因为Windows还是FileZilla,该过程都会损坏所有文件。在他们身上添加一堆垃圾。我会根据你认为导致问题的方式进行输入,但无论我找到问题并修复它。

解决方案是压缩服务器上的父目录并下载zip。我没有修改任何代码。只是一个简单的程序修订。多么蹩脚。