2016-05-11 9 views
1

を選択し、ファイル名とリダイレクト..PHP - どのようにPDFを読むためのパスを与えるには?

の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> 

reading.php

$title = $_GET["title"]; 
header("Content-type: application/pdf"); 
header('Content-Disposition: inline; filename="$title.pdf"'); 
@readfile('D:\Learning\$title.pdf');//this is my issue 

私はそれがFailed to load PDF documentを示しリダイレクト.. 私の実行中のスクリプトファイル場所はわかっている通りですC:\xampp\htdocsただし、pdfファイルの場所は上記の通りですD:ドライブ!それにパスを与えるには?

+0

phpはそのディレクトリにアクセスできますか? –

+0

デバッグ段階で警告を '@'で抑止しないでください。それを除く。 – Raptor

答えて

0

$title.pdfという名前のファイルを探して、あなたが単一引用符にを使用しているとPHPが、$タイトル変数を含めていないとあなたがバックスラッシュを使用しています。あなたができる限りのスラッシュ

readfile("D:/Learning/$title.pdf"); 

バックスラッシュ文字をエスケープするために使用されているので、前方を使用します。

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(); 
} 

希望します。幸運を祈ります。

+0

悪いことに、私はすでに数分前にこの回答をしました。 – ArtisticPhoenix

+1

@ArtisiticPhoenixあなたの答えに欠陥があり、問題を完全に解決していませんでした。 –

+0

3つの例のうちの1つの部分に欠陥があり、エラーの原因は正しかったです。コードスタイルやメソッドのすべての改良は、実際に問題が何であるかを把握している点のほかにあります。 – ArtisticPhoenix

0

ファイル名は'D:\Learning\$title.pdf'で、文字通り$title.pdfはドル記号($)で表示されていますか?

PHP変数補間は、"二重引用符で動作します。これは、変数が文字列であり、phpによって変数として認識されないことを意味します。

それは窓がスラッシュ(Unix形式)を受け入れることは注目に値しますしかしあなたが最も可能性が高い

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

OR(個人的に私は、背中のスラッシュはエスケープのこれを回避する)にそれを変更したいと思います

readfile('D:\Learning\\'.$title.'.pdf'); 
readfile('D:/Learning/'.$title.'.pdf'); //this works fine on windows and avoids escaping the \ 

または私が好むもの。

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

そうでなければ、それはあなたの最後の2行では、文字通り

+0

まだ動作しません –

+0

ファイル拡張子の前後に引用符を含めなかったので、2番目の例が間違っています。 –

+0

@WilliamCasey - それは本当ですが、バックスラッシュもその例では一重引用符をエスケープしていました〜歓声 – ArtisticPhoenix

関連する問題