php獲取ftp://eq_user:foxlink@172.168.1.250:21/下面的全部照片文件,並且打包成zip下載出來
时间: 2024-12-24 19:31:40 浏览: 9
在PHP中,你可以使用FTP协议库(如`ftpclient`或第三方库如`phpseclib`)来连接到FTP服务器并下载文件。然后,可以利用`ziparchive`类将下载的图片文件打包成ZIP文件供用户下载。这里是一个简化的示例代码:
```php
<?php
require 'vendor/autoload.php'; // 如果使用phpseclib,需要安装它
// FTP配置
$host = '172.168.1.250';
$username = 'eq_user';
$password = 'foxlink';
$port = 21;
$remoteDir = '/';
// 创建FTP客户端
try {
$ftp = new \League\Flysystem\Adapter\Ftp([
'host' => $host,
'username' => $username,
'password' => $password,
'port' => $port,
]);
// 检查目录是否存在
if (!$ftp->hasDirectory($remoteDir)) {
throw new Exception("Directory not found on the FTP server.");
}
// 获取远程目录下的所有文件列表
$files = iterator_to_array($ftp->listContents($remoteDir));
// 创建临时目录保存文件
$tempDir = sys_get_temp_dir() . '/' . uniqid('ftp_zip_', true);
mkdir($tempDir);
// 将图片文件复制到临时目录,并创建Zip档案
$zip = new ZipArchive();
$zipName = $tempDir . '/images.zip';
if ($zip->open($zipName, ZipArchive::CREATE) !== true) {
throw new Exception("Failed to create zip file.");
}
foreach ($files as $file) {
if (strpos($file['name'], '.jpg') || strpos($file['name'], '.png')) { // 只包含图片文件
$localPath = "{$tempDir}/{$file['name']}";
$ftp->copyTo($file['path'], $localPath);
$zip->addFile($localPath, $file['name']);
}
}
// 关闭并释放资源
$zip->close();
rmdir($tempDir); // 移除临时目录
ftp_close($ftp);
// 设置HTTP头引导下载
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="images.zip"');
} catch (Exception $e) {
echo "Error: {$e->getMessage()}";
}
?>
```
请注意,这个示例假设所有图片文件都是.jpg或.png格式,并且直接处理了异常。在实际应用中,你可能需要根据实际情况调整代码,例如检查权限、错误处理等。
阅读全文