Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存在性检查和获取一次性URL的内容_Php - Fatal编程技术网

Php 存在性检查和获取一次性URL的内容

Php 存在性检查和获取一次性URL的内容,php,Php,我知道有足够的方法在抛出你通常的文件\u get\u内容之前检查URL的存在,但有一个问题。所有的人都试图请求文件,我什么也得不到,除了真假 当处理只能调用一次的URL时(例如,如果它们有一个只能使用一次的授权令牌以避免重复攻击),那么我无法真正检查文件是否存在,并再次请求获取实际输出 因此,本质上我需要一种调用URL的方法,如果它返回某种可用的URL,那么就给我输出,如果没有,就不要给我错误,只返回false。通常,您可以执行HTTP头请求,获取头的预览 $fd = @ fopen('url'

我知道有足够的方法在抛出你通常的
文件\u get\u内容之前检查URL的存在,但有一个问题。所有的人都试图请求文件,我什么也得不到,除了真假

当处理只能调用一次的URL时(例如,如果它们有一个只能使用一次的授权令牌以避免重复攻击),那么我无法真正检查文件是否存在,并再次请求获取实际输出


因此,本质上我需要一种调用URL的方法,如果它返回某种可用的URL,那么就给我输出,如果没有,就不要给我错误,只返回false。

通常,您可以执行HTTP头请求,获取头的预览

$fd = @ fopen('url', 'rb');
if ($fd) {
    fclose($fd);
    $contents = file_get_contents('url');
}
UPD:

您应该这样写(例如控制器的动作):


为什么你不能做文件获取内容,然后检查($contents!==false)?是的,但是文件获取内容会抛出一个错误,这是我不想看到的。在文件前面放一个@以抑制E\u警告,然后检查它是否返回false。@通常不是很糟糕的编码标准吗?你并没有被选项淹没。就标准而言,在本例中,您在下一行显式地处理故障,这基本上是错误抑制的目的。如果可能的话,头部预览也是合理的,但这是一个普遍接受的选项。嗯,当服务器存在时,它不会向服务器启动一个完整的新请求吗。问题是,一旦请求,您将无法再次获得它。@My1$url='1!'scheme://host[:port][/path][?secret_key=12345678]'当密钥只有一次有效时。但是为什么你不能在DB上存储访问关系和/或这个键呢?url的工作原理和你说的差不多,但是你的代码看起来像是它首先尝试访问它,如果它得到什么,它会关闭连接并再次调用。此外,该密钥仅有效一次,以避免重复攻击。但是,请稍候,如果您打开它,您基本上会打开连接并准备好读取。因此,如果我们在获得某个内容时不关闭该内容,而是使用fopen的ressource指针,则可能会关闭该内容work@My1但这是用户的隐藏URL。关于此URL,只有您知道应用程序。您可以选择其他协议nfs、rsync、webdav、ftp、ssh或amazon clouds。但问题是服务器如何处理它,而不是在head请求后将其锁定。最好的想法是,如果可以得到HTTP状态码,任何输出都不会产生错误
...
public function download()
{
    // chek auth and access rights
    // get and sanitize key
    // check existence of remote file
    // check key (try get available from DB)
    // get contents of existence file
    // set key (in DB) has used and/or generate new unique key for this file
}
...