Я хочу загрузить содержимое (файлы, папки и подпапки) каталога с FTP-сервера, используя PHP.
Я смог сделать это с помощью этой функции:
function ftp_sync ($dir) {
global $conn_id;
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
ftp_get($conn_id, $file, $file, FTP_BINARY);
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}
Источник: https://stackoverflow.com/a/5650503/10349407
Но через некоторое время;сценарий отключен от браузера, потому что он занимает много времени, так как содержимое папки велико.
Я попытался установить:
ini_set('max_execution_time', 0);
set_time_limit(0);
, но я все еще получаю ошибку Warning: set_time_limit() has been disabled for security reasons
поскольку я на общем хостинге.
Итак, мой вопрос: возможно ли выполнять перенаправления в вышеупомянутой функции PHP, чтобы она запускала новую страницу для каждого загружаемого файла (это мое предложение, чтобы предотвратитьпредел тайм-аута)
Итак, строка вроде:
header("Location: " . __FILE__ . "?file=$file");
, где он должен загрузить файл со значением $_GET['file']
, затем перенаправить снова и так до тех пор, пока не завершится загрузка всегосодержание.
РЕДАКТИРОВАТЬ: Это моя попытка, но она не работает: /
function ftp_sync ($dir) {
global $conn_id;
if( isset($_GET['cd']) ) {
$dir = $_GET['cd'];
}
if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
if (!(is_dir($dir)))
mkdir($dir);
chdir ($dir);
}
$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {
if ($file == '.' || $file == '..')
continue;
if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
header("refresh:0.5;url=" . "ftp.php" . "?file=$file&cd=" . ftp_pwd($conn_id));
die();
}
else {
ftp_get($conn_id, $file, $file, FTP_BINARY);
}
}
ftp_chdir ($conn_id, "..");
chdir ("..");
}