通过 url 在本机 php 路由器中检查文件是否存在

Checking the existing of a file by url inside native php router

我想知道如何通过本机 php 路由器 (index.php) 中给定的 url 检查文件是否存在,这是我尝试过的方法:

function does_file_exists($url){
  try{
    $headers = get_headers($url);
    if(is_array($headers))
    {
      return (stripos($headers[0],"200 OK") || stripos($headers[0],"304 OK")) ? true : false;
    }
    else
    {

    }
  }
  catch(Exception $e)
  {

  }
  return false;
}

内部 (index.php)

$url = "http://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
if(does_file_exists($url))
{
  $ext = pathinfo($url, PATHINFO_EXTENSION);
  if(in_array($ext, $unauthorized_file_type))
  {
    Redirect('404.php');
    exit();
  }
  else
  {
    header("Location: $url");
    exit();
  }
}

页面输出消息时间过长'Warning: get_headers(http://[website]/test): failed to open stream: HTTP request failed'可能是递归的原因。如果没有 .htaccess 文件,我该如何解决?

您可以在 PHP.See 中使用 file_exists 命令来完成此操作,例如:

if (file_exists(__DIR__ . "/views/dashboard.php")) {


          include __DIR__ . “/views/dashboard.php”;

}

__DIR__ 这里指的是 currently-executing 脚本的目录,因此您需要使所有路径都与之相关。

str_contains(get_headers($url)[0], "200 OK") 工作正常但它是 resource-intensive 因为它总是会尝试下载文件,即使它已经在浏览器的缓存中。您可以从膨胀的服务器日志中看到这种情况正在发生,即使该站点没有明显变慢。

我剧院的网站在主页上显示每个节目的缩略图,因此可以有 50 多个。无论好坏,我使用的是 Wordpress,它总是将主页 URL 添加到它存储在其数据库中的每个文件之前。确保 file_exists() 按预期工作的简单方法是使用此:

function sgs_file_exists ($file) {
    return file_exists(str_replace(home_url(), $_SERVER['DOCUMENT_ROOT'], $file));
}

如果您的站点不使用 Wordpress,请将上面的 home_url() 替换为绝对主页 URL,例如。 'http://mywebsite.com' - 即。在引号内并且没有尾随的前斜杠。

file_exists() 将通过在 $_SERVER 位前面加上相对 URLs 正常工作,例如:

file_exists ($_SERVER['DOCUMENT_ROOT'] . '/subdir/subsubdir/filename.htm');