gpt4 book ai didi

php - 从外部拥有的服务器检查目录或文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:28 25 4
gpt4 key购买 nike

我正在用 PHP 为一家拥有不同服务器的音乐公司开发脚本,因此他们需要显示文件是否存在于外部服务器上

就像他们有 3 个版本的每个音乐文件 mp3 mp4 等.....他们从特定的外部服务器访问文件(每个版本)。我为此制定了三种解决方案,它们都非常有效,但它们使服务器变慢了。

第一种方法:

$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
/* Handle 404 here. */
}

curl_close($handle);

/* Handle $response here. */

第二种方法:使用 NuSOAP 我制作了一个 api,它在内部检查文件并返回是/否

第三种方法:

function checkurl($url)
{
return true;
$file_headers = @get_headers($url);
//var_dump($file_headers);

if($file_headers[0] == 'HTTP/1.1 302 Moved Temporarily' || $file_headers[0] =='HTTP/1.1 302 Found') {
$exists = false;

}
else {
$exists = true;
}
return $exists;
}

所以我需要一个不会使服务器减慢任何建议的解决方案

最佳答案

请务必发出 HEAD 请求,而不是 GET,因为您不想获取文件内容。也许您需要遵循重定向,或者不需要...

curl 示例(感谢 this blog post ):

<?php
$url = 'http://localhost/c.txt';

echo "\n checking: $url";

$c = curl_init();
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $c, CURLOPT_MAXREDIRS, 5 );
curl_setopt( $c, CURLOPT_CUSTOMREQUEST, 'HEAD' );
curl_setopt( $c, CURLOPT_HEADER, 1 );
curl_setopt( $c, CURLOPT_NOBODY, true );
curl_setopt( $c, CURLOPT_URL, $url );
$res = curl_exec( $c );

echo "\n\ncurl:\n";
var_dump($res);

echo "\nis 200: ";
var_dump(false !== strpos($res, 'HTTP/1.1 200 OK'));

如果文件不能通过 HTTP 访问,SOAP 或其他网络服务实现可以是一个选项。

如果要使用get_headers(),请注意默认为it's slow because it issues a GET request .要使用 HEAD 请求,您应该更改默认流上下文(请查看 php 手册中的 get_headers()):

stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD'
)
)
);

关于php - 从外部拥有的服务器检查目录或文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708653/

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