您正在检查状态代码。虽然使用HTTP通常是正确的,但请注意您请求的是PHP脚本。
PHP脚本
做
无论查询参数如何,都存在。
真不敢想象你试了15次
不同的
答案在网站上,但对于代码示例:
-
检查预期行上的200状态代码
-
检查内容长度
...
$headers = get_headers($url, true);
stream_context_set_default($previous);
[$status] = sscanf($headers[0] ?? '', 'HTTP/1.1 %d OK');
return $status === 200 && isset($headers['Content-Length']);
}
由于您还发现不同网站的标准/含义可能存在很大差异,我建议您为其提供一个回调函数,您可以在其中采用:
function FileExists($url, ?closure $filter): bool
{
$previous = stream_context_get_options(stream_context_get_default());
stream_context_set_default(['http' => ['method' => 'HEAD', 'follow_location' => 0]]);
$headers = get_headers($url, true);
stream_context_set_default($previous);
[$status] = sscanf($headers[0] ?? '', 'HTTP/1.1 %d OK');
return $status === 200 && $filter ? $filter($headers) : true;
}
$url1 = "https://example.net/path/to/script.php?option=a";
$url2 = "https://example.net/path/to/script.php?option=b";
var_dump(
FileExists($url1, fn (array $headers): bool => isset($headers['Content-Length'])),
FileExists($url2, fn (array $headers): bool => isset($headers['Content-Length'])),
); // bool(false), bool(true)
使用你偶然发现的零件,使它们能够注射(=灵活)。