gpt4 book ai didi

php - 检查字符串以查看文件是否存在于本地

转载 作者:可可西里 更新时间:2023-11-01 14:04:44 25 4
gpt4 key购买 nike

如果可以的话,我有一个问题。我有一个名为 $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。虽然这可能是最安全的,但它很可能是最密集的,我不想使用这种方法。

最佳答案

除了其他答案之外,您还可以简单地拒绝使用方案的路径:

if (parse_url($path, PHP_URL_SCHEME)) {
// has something:// so ignore
}

这也适用于特殊包装器,例如 php://zlib:// 等...

您还可以通过在 file:// 之前强制对输入变量进行本地检查:

file_exists('file://' . $path);

关于php - 检查字符串以查看文件是否存在于本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com