首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制和解压函数工作,直到从另一个函数调用它?

复制和解压函数工作,直到从另一个函数调用它?
EN

Stack Overflow用户
提问于 2019-04-27 15:29:37
回答 1查看 44关注 0票数 0

我有一个名为fileGet的函数,它的目的很简单:

  1. 从给定的URL下载文件。
  2. 解压缩说文件。
  3. 启动“文件格式”功能。

但是,当我从另一个函数调用它时,它就停止工作了?

当它从另一个函数(过去非常好地工作)运行时,我被抛出一个没有解压缩文件的空zip。

然后,当程序试图使用不存在的文件时,这会抛出程序中的错误。

任何帮助都将不胜感激。

编辑:目录结构如下:

MainFolder [phpThisCode,jsonzip & json文件]

我希望这能帮到你?

代码语言:javascript
复制
function fileGet(){
  $extURL = 'exampleURL';
  $path = "../json/AllSets.json.zip";
  copy($extURL, $path);
  $newZip = new ZipArchive();
  if ($newZip->open('../json/AllSets.json.zip') == TRUE) {
    $newZip->extractTo('../json/');
    $newZip->close();
  }
}

function fileArch(){
  $today = date("d-m-Y");
  if (file_exists('../json/archive/'.$today.'.zip') == FALSE){
    $zip = new ZipArchive();
    $zip->open('../json/archive/'.$today.'.zip', ZipArchive::CREATE);
    $zip->addFile('../json/AllSetsLess.json', 'AllSetsLess.json');
    $zip->close();
    unlink('../json/AllSets.json');
    unlink('../json/AllSets.json.zip');
    unlink('../json/AllSetsLess.json');
    fileGet();
  }
}

function fileCompare(){
  stream_context_set_default(
    array(
      'http' => array(
        'method' => 'HEAD'
      )
    )
  );
  $extURL = get_headers("exampleURL")[3];
  $extURL = (int)preg_replace("/[^0-9]/", '', $extURL);
  $intURL = filesize("../json/AllSets.json.zip");
  echo('external: '.$extURL.' internal: '.$intURL);
  if ($extURL !== $intURL) {
    echo('Launching Download');
    fileArch();
  }
}

fileCompare();

我希望在我的json文件夹中有一个zip文件和json文件,但是只需获得一个文件大小为0的zip文件。

编辑:我尝试了几种不同的方法,包括从fileArch()中删除if语句,并使用relativeabsolute链接,但是现在我完全困惑了,如果您单独调用它,fileGet()函数可以正常工作,但是当从其他函数中调用它时,它根本无法工作。

Edit2:所以,如果我从fileArch()开始这个程序,那么它运行的很好,我想也许fileCompare()中还有什么东西是可以打开的?但是,我找不到任何未打开的内容,变量都应该是本地的。我知道fileCompare()正在加载fileArch(),因为它可以很好地删除文件,但是在fileCompare()fileGet()之间似乎存在某种冲突。如果您知道这可能是什么,请告诉我,因为PHP不是我的第一语言。

编辑3:我已经找到了冲突,但不知道为什么冲突。所以问题是密码:

代码语言:javascript
复制
 stream_context_set_default(
    array(
      'http' => array(
        'method' => 'HEAD'
      )
    )
  );

fileCompare()函数中,我需要这段代码来允许服务器从我记得的内容中检查另一个服务器的头,所以有人能告诉我为什么会导致冲突吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-27 20:52:34

代码语言:javascript
复制
stream_context_set_default(
    array(
      'http' => array(
        'method' => 'HEAD'
      )
    )
  );

这就是导致问题的代码,也许是因为get请求被转换为头请求而干扰了复制请求?我从PHP手册这里中获得了代码,所以如果其他人在复制请求方面有问题,那么检查您是否已经更改了stream_context。我将阅读stream_context应该如何使用,并在这里写回当我有更重要的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55882074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档