0

私はここにこのコードを持っています:

if(isset($_POST['file_id'])){
    $file_id = $_POST['file_id'];
    $query = $mysqli->query("SELECT `IdDocumento`,`nome_ficheiro`,`caminho_ficheiro`
            FROM  `documento` 
            WHERE `IdDocumento` = $file_id");           
    $result = $query->fetch_object();
    $caminho = $result->caminho_ficheiro;
    $nome = $result->nome_ficheiro;
    header('Content-Disposition: attachment; filename="'.$nome.'"');
    readfile($caminho);
    exit();         
}

1ページからファイルをダウンロードします。ダウンロードでは問題なく動作します。しかし、そのコードにifを追加したい..次のようなもの:

    if (file is a PDF) {
        header('Content-type: application/pdf');
    }else{
        header('Content-Disposition: attachment; filename="'.$nome.'"');
        readfile($caminho);
        exit();
}

そのため、ファイルが PDF ファイルの場合は、ダウンロードする代わりにファイルを開きます。どうすればいいですか?検索しましたが、ファイルの種類を確認する方法が見つかりませんでした。

編集(正しい解決策):

    if(isset($_POST['file_id'])){
    $query = "SELECT `IdDocumento`,`nome_ficheiro`,`caminho_ficheiro`,  `tamanho_ficheiro`
            FROM  `documento` 
            WHERE `IdDocumento` = ?";
    if($stmt = $mysqli->prepare($query)){
        $stmt->bind_param('i', $file_id);
        $file_id = $_POST['file_id'];
        $stmt->execute();
        $stmt->bind_result($IdDocumento, $nome_ficheiro, $caminho_ficheiro, $tamanho_ficheiro);
        while ($stmt->fetch()) {
            if (strtolower(pathinfo($nome_ficheiro, PATHINFO_EXTENSION)) == 'pdf') {
                header('Content-type: application/pdf');
                header('Content-Disposition: inline; filename="'.$nome_ficheiro.'"');
                readfile($caminho_ficheiro);   
            }else{
                header('Content-Disposition: attachment; filename="'.$nome_ficheiro.'"');
                readfile($caminho_ficheiro);
            }
            exit(); 
        }
        $stmt->close();
    }else{
        printf("Prepared Statement Error: %s\n", $mysqli->error);
    }   
}else{
    echo"Download do ficheiro falhou";
}
4

1 に答える 1