在PHP中从服务器下载文件时文件名未知

时间:2018-12-01 14:29:22

标签: php

我正在尝试通过使用按钮使用PHP从服务器下载文件。

文件正在下载中,工作正常。但是,每当我尝试下载文件时,文件名都会更改为未知文件格式“ .pn1,.pn5等”,而不是PNG。

这是下载文件的按钮

<a href="download.php"></a>

这是我的下载PHP。

$value = custom_query("SELECT * FROM tbl_training ORDER BY id DESC LIMIT 

1");
if($value->rowCount()>0) {
    while ($r = $value->fetch(PDO::FETCH_ASSOC)) {
        $test_id = substr($r['test_id'], -1);
        $new_id = $test_id + 1;
        $new_file_name = substr($r['test_id'], 0, -1) . "" . $new_id;

    }
}
header ("Content-Disposition: attachment; filename='$new_file_name.png'");
header("Content-Length: " . filesize("1234-56689.png"));
header("Content-Type: application/octet-stream;");
readfile("1234-56689.png");
echo $ab = AB(50);
$abtf= ABTF(50);
$tf = TF(50);
$ab_result = substr($ab, 0, -1);
$abtf_result = substr($abtf, 0, -1);
$tf_result = substr($tf, 0, -1);

        $data1 = array(
                "test_id"=>$new_file_name,
                "stud_id"=>$new_file_name,
                "section"=>"Section A",
                "a_key"=>$ab_result
        );
        $data2 = array(
            "test_id"=>$new_file_name,
            "stud_id"=>$new_file_name,
            "section"=>"Section A",
            "a_key"=>$abtf_result
        );
        $data3 = array(
            "test_id"=>$new_file_name,
            "stud_id"=>$new_file_name,
            "section"=>"Section A",
            "a_key"=>$tf_result
        );
        db_insert('tbl_training', $data1);
        db_insert('tbl_training_abtf', $data2);
        db_insert('tbl_training_tf', $data3);

除了将文件名更改为该文件名之外,其他所有方法都可以正常工作 enter image description here

感谢您对我的帮助! :)

1 个答案:

答案 0 :(得分:1)

使用时...

$new_file_name = substr($r['test_id'], 0, -1) . "" . $new_id;

您只是从字符串中删除了最后一个字符,然后添加了ID。如果此字符串包含"1234.png",则最终会得到类似"1234.pn1"的内容。因此,值得检查您的数据库以查看这些文件名实际包含的内容。

这反而确保了它通过在“。”之前加上字符串来删除扩展名。然后将.png扩展名重新添加到您的header输出中...

$new_file_name = strstr($r['test_id'], ".", true) . $new_id;