Javascript PHP-如何给出读取pdf的路径?

Javascript PHP-如何给出读取pdf的路径?,javascript,php,Javascript,Php,选择文件名并重定向 index.php <?php $book_name = ["Jenkins_Essentials","Asterisk","phalcon"]; echo "<select><option selected>Book Name</option>"; foreach ($book_name as $key => $value) { echo "<option name='$key'>$value</op

选择文件名并重定向

index.php

<?php
$book_name = ["Jenkins_Essentials","Asterisk","phalcon"];
echo "<select><option selected>Book Name</option>";
foreach ($book_name as $key => $value) {
    echo "<option name='$key'>$value</option>";
}
echo "</select>";
?>
<script type="text/javascript">
$(document).ready(function(){
    $("select").on("change",function(){
        location.href = "reading.php?title="+$(this).val();            

    });
});
</script>
$title = $_GET["title"];
header("Content-type: application/pdf");
header('Content-Disposition: inline; filename="$title.pdf"');
@readfile('D:\Learning\$title.pdf');//this is my issue
当我重定向它时,显示加载PDF文档失败。。
我运行的脚本文件的位置是我们知道的
C:\xampp\htdocs
,但pdf文件的位置如上图
D:
drive!如何给出它的路径?

是文件名
'D:\Learning\$title.pdf'
字面意思是带美元($)符号的
$title.pdf

PHP变量插值在
双引号上工作,这意味着您的变量实际上是一个字符串,PHP不会将其识别为变量

您很可能希望将其更改为

 readfile("D:\Learning\$title.pdf");
或者(我个人会避免使用反斜杠转义),但是值得注意的是,windows将接受正斜杠(Unix风格)

或者我更喜欢的

 readfile("D:\Learning\{$title.pdf}");

否则,它将查找一个名为
$title.pdf
的文件,字面意思是是文件名
'D:\Learning\$title.pdf'
字面意思是带美元($)符号的
$title.pdf

PHP变量插值在
双引号上工作,这意味着您的变量实际上是一个字符串,PHP不会将其识别为变量

您很可能希望将其更改为

 readfile("D:\Learning\$title.pdf");
或者(我个人会避免使用反斜杠转义),但是值得注意的是,windows将接受正斜杠(Unix风格)

或者我更喜欢的

 readfile("D:\Learning\{$title.pdf}");

否则,它将查找一个名为
$title.pdf
的文件,在最后两行中,PHP不包括$title变量,因为您使用的是单引号反斜杠。请尝试以下方法之一:

header('Content-Disposition: inline; filename="'.$title.'.pdf"');
@readfile('D:/Learning/'.$title.'.pdf');
或:

反斜杠用于转义字符,因此尽可能多地使用前斜杠。在Windows上,可以在文件路径中同时使用这两种路径。此外,要输出文件,请尝试使用此选项而不是@readfile:

$pdf = file_get_contents('D:/Learning/'.$title.'.pdf');
echo $pdf;
另一个注意事项-您应该在访问文件之前检查文件是否存在。将以下内容放在脚本的顶部:

if(!file_exists('D:/Learning/'.$title.'.pdf')) {
    echo "File doesn't exist.";
    exit();
}

希望这有帮助。祝您一切顺利。

在最后两行中,PHP没有包含$title变量,因为您使用的是单引号和反斜杠。请尝试以下方法之一:

header('Content-Disposition: inline; filename="'.$title.'.pdf"');
@readfile('D:/Learning/'.$title.'.pdf');
或:

反斜杠用于转义字符,因此尽可能多地使用前斜杠。在Windows上,可以在文件路径中同时使用这两种路径。此外,要输出文件,请尝试使用此选项而不是@readfile:

$pdf = file_get_contents('D:/Learning/'.$title.'.pdf');
echo $pdf;
另一个注意事项-您应该在访问文件之前检查文件是否存在。将以下内容放在脚本的顶部:

if(!file_exists('D:/Learning/'.$title.'.pdf')) {
    echo "File doesn't exist.";
    exit();
}

希望这有帮助。祝您一切顺利。

php有权访问该目录吗?在调试阶段,切勿使用
@
抑制警告。删除它。php有权访问该目录吗?在调试阶段,切勿使用
@
抑制警告。删除它。@ArtisiticPhoenix您的答案有缺陷,并没有完全解决问题。三个示例中的一个部分有缺陷,错误的原因我是正确的-只是说。对代码样式或方法的所有改进都与实际找出问题所在无关。@ArtisiticPhoenix您的答案有缺陷,并且没有完全解决问题。三个示例中的一个示例中有一部分有缺陷,我所说的错误原因是正确的。对代码样式或方法的所有改进都与实际找出问题所在无关。您的第二个示例是错误的,因为您没有在文件扩展名周围包含引号。@WilliamCasey-是的,但是\backslax转义了“该示例中的单引号~chearsy”您的第二个示例是错误的,因为您没有在文件扩展名周围加引号。@WilliamCasey-没错,但是\backslax转义了“该示例中的单引号~cheers”