通过 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');
我想知道如何通过本机 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');