php - 不完整的php云传输和复制
问题描述
我想在两个 wordpress 主机之间传输文件,我使用以下代码:
<?php
copy("https://a.com/b.zip", "b.zip");
?>
该文件大约 500mb ,但每次它都会不完整,只上传文件的几个百分比,从 10 到 200 mb。我使用 namecheap wordpress 托管。
- php 7.4
- WordPress 设置的最大上传限制 = 1gb
- PHP 限制时间 = 3600
- WordPress上传目录可写权限=可写
而且我从本地计算机上传这些文件没有任何问题,我尝试了 multcloud 但它也没有成功。我应该怎么办?
解决方案
对我来说似乎是时间和速度限制。
所以首先要添加的是避免在客户端超时时中止脚本ignore_user_abort(true);
。copy
如果可能,增加时间限制。
另一个需要考虑的选择是将文件分成更小的块或使用更高级的东西来下载,比如基于 curl 的客户端能够恢复未完成的下载(即参见这个要点)
此处复制要点
<?php
set_time_limit(0);
ignore_user_abort(true);
$url = "http://web.shit/backup.zip";
$ch = curl_init($url);
$to_file = 'web.zip';
$opt = array();
if(is_file($to_file))
{
$sz = filesize($to_file);
$opt[CURLOPT_RANGE] = $sz . "-";
}
$opt[CURLOPT_SSL_VERIFYPEER] = false;
$opt[CURLOPT_FOLLOWLOCATION] = true;
$opt[CURLOPT_FILE] = fopen($to_file, 'a');
$opt[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36';
curl_setopt_array($ch, $opt);
curl_exec($ch);
$grab_info = curl_getinfo($ch);
fclose($opt[CURLOPT_FILE]);
print_r($grab_info);
推荐阅读
- python - 在pygame中的数组支持网格中交换颜色的问题
- java - 将波斯语中的数值作为字符串类型更改为拉丁语
- javascript - 返回事件的承诺
- reactjs - 有或没有构造函数的反应初始化状态
- ios14 - 如何在 iOS14 上检测 5G(NR)?
- java - Kotlin:“公共”属性公开其“本地”类型参数
- react-native - 如何在反应原生中自定义反应导航底部选项卡?
- oauth - 使用 Github OAuth 时无需服务器的客户端身份验证
- pine-script - 在 TradingView pine v4 中做指标
- c# - Xamarin 示例项目缺少依赖项,但文件存在