Php 使用CURL发送的无效请求\u URI的解决方案

Php 使用CURL发送的无效请求\u URI的解决方案,php,apache,url,Php,Apache,Url,使用这个php脚本,我可以调用Web服务。文件名将记录在数据库中。它们是被要求的,不存在 $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

使用这个php脚本,我可以调用Web服务。文件名将记录在数据库中。它们是被要求的,不存在

$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 ); $url=”http://test.com/test.php?request=file 名称.jpg”; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); $data=curl\u exec($ch); 打印(数据); 卷曲关闭($ch); 问题是“file name.jpg”。它没有编码。 当它到达Web服务时,请求URI如下所示

["REQUEST_URI"]=> string(28) "/test/test.php?filename=file" [“请求URI”]=>string(28)“/test/test.php?filename=file” 它在第一个空格字符的开头截断url

我的问题是我无法控制人们如何发送这个请求。当然,它们应该使用urlencode函数,但我不能强制它们


因此,我需要一个解决方案来获取完整的请求URI,或者将其视为一个错误。

如果有人发送无效的请求,除了检测
$\u get['filename']
无效(我想,您的服务器上不存在文件?),并返回一个(
404
,可能?)错误之外,您无能为力


是的,应该转义一个空格——参见第2.4.3节。排除了的US-ASCII字符。

正如您所说,您无法控制将收到何种请求。你可以得到任何东西。因此,我想唯一的方法是确保您有一个正确的
filename
参数,该参数包含一个有效的文件名(例如对扩展名的限制)。不能这样做。有些文件确实没有扩展名。如果人们发送错误的url,那就是他们的问题。这是我的Web服务。我将存储此信息,以便它成为我的问题。对于任何无效的用户输入,必须有一种方法来检测问题。文件不会退出。文件名是请求。我更新了问题;太糟糕了。如果您无法(对照文件或数据库)检查
文件名
是否正确,那么您就无能为力:对于您发布的代码,这与用户发送
'file'
完全一样,这就是他们实际上在做的事情——你无法知道这不是他们想要做的事情。有趣的是,apache日志显示了完整的url“GET/test/test.php?filename=file name.jpg HTTP/1.1”,所以只有php不能处理这个问题?