2011-03-25 5 views
0

이 PHP 스크립트를 사용하여 webservice를 호출 할 수 있습니다. 파일 이름은 데이터베이스에 기록됩니다. 그들은 요청되었고 존재하지 않습니다.CURL을 사용하여 보낸 잘못된 REQUEST_URI에 대한 솔루션

 
$url  = "http://test.com/test.php?request=file name.jpg"; 
$ch  = curl_init(); 
curl_setopt($ch, CURLOPT_URL,   $url ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE ); 
$data = curl_exec($ch); 
print($data); 
curl_close($ch); 

문제는 "file name.jpg"입니다. 인코딩되지 않았습니다. 는 웹 서비스에 요청을 받으면 는 URI 그것은 최초의 우주 문자의 시작 URL을 자릅니다이

 
["REQUEST_URI"]=> string(28) "/test/test.php?filename=file" 

것 같습니다.

내 문제는 사람들이이 요청을 보내는 방식을 제어 할 수 없다는 것입니다. 물론 그들은 urlencode 함수를 사용해야하지만 강제 할 수는 없습니다.

그래서 전체 요청 URI를 얻거나 오류로 잡으려면 해결책이 필요합니다. 사람들이 아리 잘못된 요청을 보내는 경우

+0

당신이 말한대로 어떤 종류의 요청을 제어 할 수 없습니다. 당신은 아무것도 얻을 수 있습니다. 그래서 나는 올바른 파일 이름 (예 : 확장에 대한 제한)을 포함하는 올바른'filename' 매개 변수가 있는지 확인하는 유일한 방법이 될 것이라고 생각합니다. –

+0

그럴 수 없습니다. 일부 파일에는 실제로 확장자가 없습니다. – danidacar

+0

사람들이 ** 잘못된 url **을 보내는 경우 - 다음은 문제입니다. – zerkms

답변

1

는, 당신은 (서버에 존재하지 않는 파일, 내 생각?)을 $_GET['filename']이 유효 감지 제외 할, 그리고 그들에게 (404을 반환 할 수 있습니다 많은이 없다 아마도?) 오류.

그리고 예, 공백을 이스케이프해야합니다 (2.4.3. Excluded US-ASCII CharactersRFC 2396 참조).

+0

파일이 종료되지 않습니다. 파일 이름은 요청입니다. 나는 그 질문을 갱신했다. – danidacar

+0

오. 너무 나빴어. * (파일 또는 데이터베이스와 대조) * 파일 이름이 올바른지 여부를 확인할 방법이없는 경우에는 할 수있는 일이 많지 않습니다. 게시 한 코드를 사용하면 '파일'을 보낸 것과 똑같습니다. 그게 실제로하고있는 것과 같습니다. 그리고 그들이하고 싶은 것이 아니라는 것을 당신이 알 수있는 방법이 없습니다. –

+0

흥미로운 점은 아파치 로그가 전체 URL "GET /test/test.php?filename=file name.jpg HTTP/1.1"을 보여 주므로 PHP만이이를 처리 할 수 ​​없습니까? – danidacar

관련 문제