【问题标题】:Sanitizing File Paths in PHP在 PHP 中清理文件路径
【发布时间】:2012-03-12 05:14:30
【问题描述】:

在 PHP 中,是否有一个函数可以执行类似于 realpath() 的逻辑,但在文件系统中可能不存在的文件上?显然它无法解析链接等,但我的目标是查看用户提供的路径是否在某个目录(或该目录的子目录)中,而不必考虑 /.././我自己的路径类型的问题。如果文件不存在时调用 realpath 不返回 false 就完美了。

【问题讨论】:

  • 如果它不应该返回false,它应该返回什么?
  • "users" 在你的服务器上提供路径听起来是个坏主意。
  • 您总是可以使用dir 使自己成为一个函数。
  • 理想情况下,它可以采用类似 "/var/www/foo/../bar" 并返回 "/var/www/bar" 即使该路径不存在(已经有另一个内置 PHP 函数,可以告诉我文件是否存在,所以我也不需要这个)

标签: php realpath


【解决方案1】:

如果您只关心文件,请尝试:

function unrealpath($path){
  $rp = realpath(dirname($path));
  if( false === $rp )
    return false;
  return $rp.basename($path);
}

如果您担心目录是否存在,这将不起作用。

【讨论】:

    【解决方案2】:

    如果你只需要删除 /../ 一个自写的函数就不会那么困难了。 只需将字符串拆分为数组,遍历数组并将值插入新数组即可。如果您点击 .. 删除插入新数组的最后一个元素。然后将第二个数组合并回一个字符串。

    【讨论】:

    • 我之所以犹豫这样做,只是因为我听说过人们在执行诸如指定 '.' 的多字节表示之类的事情时使用的黑客手段。性格绕过人天真地剥着'。特点。也许我不需要担心PHP中的这些事情?
    • 实际上,我不知道 php 是否解释了那些多字节“。”作为目录向上操作。如果是这种情况,值得自己尝试一下。有时间我也试试。
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2014-02-20
    • 2013-02-04
    • 2010-11-02
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多