2012-12-07 4 views
1

로드하려면 어떻게해야합니까? 지금 당장은 이미지가 전혀 표시되지 않습니다 ... 저는 대개 captcha를 만드는 데별로 좋지 않습니다. 보통이 일을하지 않기 때문입니다.보안 문자 이미지가로드되지 않습니까?

captcha.php :

<?php 
$string = ''; 
for ($i = 0; $i < 5; $i++) { 
    // this numbers refer to numbers of the ascii table (lower case) 
    $string .= chr(rand(97, 122)); 
} 
$image = imagecreatetruecolor(170, 60); 
$color = imagecolorallocate($image, 200, 100, 90); // red 
$white = imagecolorallocate($image, 255, 255, 255); 
imagefilledrectangle($image,0,0,399,99,$white); 
imagettftext ($image, 30, 0, 10, 40, $color, ASSETPATH."arial.ttf", $string); 
header("Content-type: image/png"); 
imagepng($image); 
?> 

register.php : 나는 다른 곳을 사용하고 있기 때문에

<?php echo '<img src="'.ASSETPATH.'img/captcha.php" />'; ?> 

내 자산 경로가 정확하고 완벽하게 정상적으로로드합니다. 이 프로젝트의 MVC 형식이 어떻게 든 어지럽습니까?

+0

CAPTCHA를 사용해야하는 경우 reCAPTCHA와 같은 서비스를 활용하십시오. 사용자 정의 스크립트 (흰색 배경에 일반 텍스트)로 생성 된 CAPTCHA는 크랙이 발생하지 않습니다. – leepowers

답변

0

recaptcha와 같은 captcha 서비스 중 하나를 사용하는 것은 어떻습니까?

0

난 단지 당신이 당신의 fontFile에 귀하의 이미지와 동일한 경로에 저장했다고 가정 할 수 있습니다 당신이 이미지 URI에이 상수 ASSETPATH 모두의 사용뿐만 아니라 imagettftext에서 fontFile에 경로에 의해 판단?

그렇지 않은 경우 또는 파일을 열 수없는 경우 PHP는 imagettftext(): Invalid font filename이라는 경고를 발생시킵니다. display_errors으로 설정된 경우 php.ini에서 (확인하려면 phpinfo을 확인할 수 있습니다) 이는 이미지 데이터와 함께 오류 메시지가 출력 스트림으로 전송된다는 것을 의미합니다 (즉, 이미지 데이터가 손상되어 브라우저가 표시되지 않음). 이미지를 표시). 또한 헤더를 호출하기 전에 오류가 발생했기 때문에 헤더가 수정되는 것을 방지 할 수 있습니다.

그러나, display_errors를가 켜져되지 않고 PHP가 제공 한 fontFile에를 찾을 수 없습니다 또는 어떤 이유로 열 수없는 경우 결과 ( 예를 들어, 권한) 빈 170x60 PNG 이미지 일 것이다.

로컬에서 코드를 테스트하면 필자가 truetype 글꼴 파일에 대한 정확한 절대 경로를 PHP에 제공하는 한 예상대로 작동합니다.

예를 들어, 시스템에 내 글꼴 파일을 그대로 두지 않기 때문에 내 웹 루트에없는 /usr/share/fonts/truetype/에 저장된 일부 TrueType 글꼴이 있습니다. 또한이 PHP 파일을 읽으려면 내 PHP 사용자에게 권한이 있어야합니다. 이제

, 나는 내가 당신의 코드를 사용하여 다음과 같은 이미지를 얻을 사용하려는 트루 타입 글꼴 파일의 올바른 절대 경로로 PHP를 제공하는 경우 ...

$string = ''; 
for ($i = 0; $i < 5; $i++) { 
    // this numbers refer to numbers of the ascii table (lower case) 
    $string .= chr(rand(97, 122)); 
} 
$image = imagecreatetruecolor(170, 60); 
$color = imagecolorallocate($image, 200, 100, 90); // red 
$white = imagecolorallocate($image, 255, 255, 255); 
imagefilledrectangle($image,0,0,399,99,$white); 
imagettftext ($image, 30, 0, 10, 40, $color, '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-ExtraLight.ttf', $string); 
header("Content-type: image/png"); 
imagepng($image); 

Image output from the above code

무엇 당신은 이것을 더 이상 디버깅하기 위해 노력해야한다. display_errors가 켜져 있고 error_reporting-1으로 설정되어있는 이미지를 생성하는 PHP 스크립트를 실행하고, 실제로 글꼴 파일이 문제가된다면 이것을 볼 수있다. error_log 또는 testin 중에 표시되는 오류 출력 g display_errors가 설정된 스크립트.