2017-09-10 4 views
0

は、ここに私のコードです:ドキュメントルートにないファイルにアクセスするにはどうすればよいですか?

// captcha.php 

<?php 
session_start(); 

    $min=0; 
    $max=9; 
    $captcha_token=''; 
    for($i=1; $i<=5; $i++){$captcha_token .= rand($min,$max).' ';} 
    $_SESSION['captcha'] = str_replace(" ","",$captcha_token); 


$im = imagecreatetruecolor(110, 34); 
$red = imagecolorallocate($im, 245, 245, 245); 
imagefill($im, 0, 0, $red); 
$text_color = imagecolorallocate($im, 80, 80, 80); 
imagestring($im, 8, 15, 9, $captcha_token, $text_color); 
header('Content-Type: image/jpeg'); 
imagejpeg($im); 
imagedestroy($im); 

?> 

そして、私はこのようにそれを使用する:それは同様に動作

<img src="../../files/captcha.php" class="captcha_pic" alt="Captcha" /> 

。ご存知のように、httpリクエストです。私はfileディレクトリの場所を変更し、ドキュメントルートの外に置きたいと思う今

http://localhost/myweb/files/captcha.php 

:私はこのように私はそのイメージを開くことができます意味します。だから私はcaptcha.phpにhttpリクエストでアクセスすることはできません。私はそれを得るために絶対パスを使用する必要があります。どうやって?

が、これは動作しないことに注意:

<?php 
    $img = include __DIR__ . "/../../files/captcha.php"; 
?> 
<img src="<?=$img?>" class="captcha_pic" alt="Captcha" /> 
+0

''なので、 '$ img'はその値で置き換えられません。 – pgngp

+0

@pgngp私はタイプミスでした。編集されました。ありがとう –

+0

正しく覚えていれば、 '__DIR__'には'/'がついていません。あなたは '$ img = include __DIR__を使ってみましたか? "/../../ files/captcha.php"; '代わりに? – pgngp

答えて

1

あなたはあなたがして含まれていることを、ファイルにあなたの機能を置き、base64でエンコードされたデータの画像生成に使用することもできます。次に

<?php 
function createBinaryImageCaptcha($text) { 
    $im = imagecreatetruecolor(110, 34); 
    $red = imagecolorallocate($im, 245, 245, 245); 
    imagefill($im, 0, 0, $red); 
    $text_color = imagecolorallocate($im, 80, 80, 80); 
    imagestring($im, 8, 15, 9, $text, $text_color); 
    ob_start(); 
    imagejpeg($im); 
    imagedestroy($im); 

    return ob_get_clean(); 
} 

function createDataImage($binary) { 
    return 'data:image/jpeg;base64,' . base64_encode($binary); 
}  

をあなたが好きな場所に置くことができる以上に必要です。使用する:

$img = createDataImage(createBinaryImageCaptcha('helloearth')) 
?> 
<img src="<?= $img ?>" alt="captcha text"> 

すべてのブラウザが画像のデータのuriをサポートしているわけではありません。

Which browsers support data URIs and since which version?

そして、キャプチャアクセシビリティを考慮してください。

+0

いいですね。私はそれを試してみるよ、ありがとう、upvote –

関連する問題