如果可以,我有一个问题。我有一个名为的变量$source
,它应该包含文件的相对路径,例如./uploads/2012/some-document.pdf
现在,这个$source
变量将包含用户输入,通过 $_GET 和 $_POST。我不希望人们输入 URL,我只想在文件仅存在于本地服务器上时做一些事情。
我的问题是检查文件是否仅存在于本地服务器上的最佳方法是什么?
这是我到目前为止所得到的:
1)file_exists
可能会根据服务器配置返回 true,因此我可以将它与 stripos 一起使用来检查字符串的前几个字符是否为 http:// ,如下所示:
if( file_exists($source) && stripos($source,'http://')!==0 ) {
echo 'File exists on local';
}
但是,缺点是我必须指定所有不同的 URL 类型,例如 https://、http:// 和 ftp://,以确保安全。
2)我realpath
用来获取文件的绝对路径,如果找不到则返回false。这似乎很可靠,但不是 100% 这是最好的应用程序
3) 用于preg_replace
首先删除字符串中的所有 URL 提及,然后简单地使用file_exists
. 虽然这可能是最安全的,但它很可能是最密集的,我不想使用这种方法。