php 远程拷贝目录,php – 使用Guzzle复制远程文件

我正在尝试将远程文件(图像PNG,GIF,JPG …)复制到我的服务器.我使用

Guzzle,因为有时候,如果文件存在,我有时会使用404,而且还需要做一个基本的验证.这个脚本在由cron作业触发的命令中发出的长脚本中.

我对Guzzle很新,我成功地复制了图像,但我的文件有错误的MIME类型.我一定在做错事.请建议我一个很好的方式来做到这一点(包括检查复制和MIME类型检查的成功/失败).如果文件没有mime类型,我会弹出一个错误与详细信息.

这是代码:

$remoteFilePath = 'http://example.com/path/to/file.jpg';

$localFilePath = '/home/www/path/to/file.jpg';

try {

$client = new Guzzle\Http\Client();

$response = $client->send($client->get($remoteFilePath)->setAuth('login', 'password'));

if ($response->getBody()->isReadable()) {

if ($response->getStatusCode()==200) {

// is this the proper way to retrieve mime type?

//$mime = array_shift(array_values($response->getHeaders()->get('Content-Type')));

file_put_contents ($localFilePath , $response->getBody()->getStream());

return true;

}

}

} catch (Exception $e) {

return $e->getMessage();

}

当我这样做我的MIME类型设置为application / x-empty

另外看起来当状态不同于200 Guzzle时会自动抛出异常.我如何阻止这种行为并自行检查状态,以便我可以自定义错误信息?

编辑:这是Guzzle 3.X

现在这是你可以使用Guzzle v 4.X做的

$client = new \GuzzleHttp\Client();

$client->get(

'http://path.to/remote.file',

[

'headers' => ['key'=>'value'],

'query' => ['param'=>'value'],

'auth' => ['username', 'password'],

'save_to' => '/path/to/local.file',

]);

或使用Guzzle流:

use GuzzleHttp\Stream;

$original = Stream\create(fopen('https://path.to/remote.file', 'r'));

$local = Stream\create(fopen('/path/to/local.file', 'w'));

$local->write($original->getContents());

看起来不错使用Guzzle 4时有更好/正确的解决方案吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值