php и .dmg плохо работают

Я создал сайт загрузки, и по какой-то причине обработка файлов .dmg всегда заканчивается повреждением при их загрузке. Любой другой тип файла работает нормально, но если кто-то загрузит .dmg, а затем загрузит его, Mac OS X скажет, что он поврежден, но этого не происходит ни с одним другим файлом. У кого-нибудь еще возникла такая проблема.

Это мой код загрузки:

$temp_file = $_FILES['Filedata']['tmp_name'];
    $ext = pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION);
    $new_file_name = md5(uniqid(rand(), true));
    $target_file = rtrim(enc_target_path, '/') . '/' . $new_file_name . '.enc.' . $ext;

    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = substr(md5('some_salt' . $password, true) . md5($password . 'more_salt', true), 0, 24);
    $opts = array('iv' => $iv, 'key' => $key);

    $my_file = fopen($temp_file, 'rb');

    $encrypted_file_name = $target_file;
    $encrypted_file = fopen($encrypted_file_name, 'wb');

    stream_filter_append($encrypted_file, 'mcrypt.rijndael_128', STREAM_FILTER_WRITE, $opts);
    //stream_copy_to_stream($my_file, $encrypted_file);

    while (!feof($my_file)) {
        fwrite($encrypted_file, fread($my_file, 4096));
    }

    fclose($encrypted_file);
    fclose($my_file);
    unlink($temp_file);

А это код загрузки:

$key = substr(md5('some_salt' . $this->password, true) . md5($this->password . 'more_salt', true), 0, 24);
                $opts = array('iv' => base64_decode($this->iv), 'key' => $key);

                $encrypted_file = fopen($this->file_path, 'rb');
                stream_filter_append($encrypted_file, 'mdecrypt.rijndael_128', STREAM_FILTER_READ, $opts);

                if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
                    header('Content-Type: "application/octet-stream"');
                    header("Content-Disposition: attachment; filename= $this->real_name");
                    header('Expires: 0');
                    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                    header("Content-Transfer-Encoding: binary");
                    header('Pragma: public');
                    header("Content-Length: " . filesize($this->file_path));
                } else {
                    header('Content-Type: "application/octet-stream"');
                    header("Content-Disposition: attachment; filename= $this->real_name");
                    header("Content-Transfer-Encoding: binary");
                    header('Expires: 0');
                    header('Pragma: no-cache');
                    header("Content-Length: " . filesize($this->file_path));
                }

                fpassthru($encrypted_file);
                fclose($encrypted_file);
                $this->add2Log();

person Community    schedule 27.07.2012    source источник
comment
Вы пробовали исходный файл перед загрузкой на том самом Mac? Есть много проблем с повреждением файла .dmg и различных Mac OS.   -  person Erwin Moller    schedule 27.07.2012
comment
Да, оригинал работает нормально, но я ответил на ответ ниже, что размеры файлов немного отличаются, но может ли это быть проблемой.   -  person    schedule 27.07.2012
comment
-1 не используйте тег download stackoverflow.com/tags/download/info   -  person Ron van der Heijden    schedule 27.07.2012
comment
@Bondye, давай. -1 из-за неправильного тега? Шутки в сторону? Почему бы не предложить редактирование, которое удаляет его вместо этого.   -  person Pekka    schedule 27.07.2012


Ответы (1)


На этот вопрос очень сложно ответить, не видя фактического кода и данных.

Однако в качестве первой меры просмотрите один из сломанных DMG с помощью текстового редактора. Он может содержать сообщения об ошибках PHP, которые генерируются во время загрузки файла. Возможно, эти ошибки возникают во всех файлах, но интерполируются в других форматах.

person Pekka    schedule 27.07.2012
comment
Привет, я не уверен, что это такое, либо я никогда не видел этого раньше, и куда делись все наши комментарии, я так потерялся? - person ; 27.07.2012
comment
@Cristian, модератор, подчистил наши комментарии. (Длинные комментарии, такие как наши, обычно не приветствуются.) - person Pekka; 27.07.2012
comment
О, извините, я этого не знал. Как вы думаете, проблема может быть внутривенно? - person ; 27.07.2012
comment
@ Кристиан понятия не имею, не уверен, что здесь происходит - person Pekka; 27.07.2012
comment
Привет, я нашел это в Интернете jeremycook.ca/2011/03/20/easy- file-encryption, что на самом деле то, что я хочу сделать, но у меня возникли проблемы с изменением этого для работы с файлом, таким как .dmg - person ; 27.07.2012
comment
@ Кристиан, ты видел там комментарий? Keep in mind, the decrypted file will be padded at the end with \4 to match a block size. If dealing with Binary data you’ll probably want to only trim those characters to make sure you don’t accidentally mess with valid data. похоже на вашу проблему - person Pekka; 27.07.2012
comment
да, я видел это, и когда я попытался использовать этот файл расшифровки, он содержит 0 байтов. - person ; 28.07.2012