2

我之前使用 php 输出缓冲来从数据库创建 csv 文件,因为我不想创建现有文件,只是想让内容可下载。

CSV 是基于文本的文件,因此很容易通过这种方式创建,您可以设置标题并刷新文本内容。但!如果我想从十六进制数据创建一个 exe 怎么办?(项目是:我有一个现有的 exe 文件,我希望用户可以在 HTML 文本框中写一些东西,然后我将其转换为十六进制并将旧文本交换为新文本)

谢谢。

4

2 回答 2

3

使用以下代码通过从硬盘读取来下载 exe 文件。

<?php
$file = 'test.exe';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
于 2012-12-01T15:43:01.283 回答
1

如果你想替换二进制文件的一部分,例如从第 100 个字节到第 200 个字节,你可以使用 substr() 和 str_pad():

$binFile = file_get_contents('/pathto/exec/file.exec');
$replacedBinFile = substr($binFile, 0, 100) . str_pad(substr($_POST['text'], 0, 100), 100, "\x00") . substr($binFile, 200);
file_put_contents('/pathto/exec/file_replaced.exec', $replacedBinFile);
于 2012-12-01T15:56:19.057 回答