я хочу создать резервную копию данных с сервера на сервер, используя библиотеку phpseclib. это недавно скрипт:
<?php
include "lib/Crypt/RSA.php";
include "lib/Crypt/Base.php";
include "lib/Crypt/RC4.php";
include "lib/Crypt/AES.php";
include "lib/Net/SFTP.php";
include "lib/Math/BigInteger.php";
set_include_path('lib/');
$sftp = new Net_SFTP('172.1.xxx.xx');
if (!$sftp->login('root', 'xxxx')) {
exit('login failed');
}
$sftp->chdir('/opt/oss/server/var/fileint/fm');
$files = $sftp->nlist('.', true);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
$dir = './Alarm/' . dirname($file);
if (!file_exists($dir)) {
//mkdir($dir, 0777, true);
}
file_put_contents($dir . '/' . $file, $sftp->get($file));
}
но все равно ошибка -> ПРЕДУПРЕЖДЕНИЕ PHP: file_put_contents ()
скопировать все файлы и папку
сервер 1
к
сервер 2
все еще ошибка «Предупреждение PHP: file_put_contents», потому что я хочу скопировать папку на другой сервер
file_put_contents создает файл локально, если только вы не используете php.net/manual/en/wrappers.php (а это не так). Если вы хотите скопировать его на сервер еще один и можете получить доступ к этому другому серверу через SFTP, могу ли я предложить вам использовать два экземпляра Net_SFTP? Тогда вы могли бы сделать $sftp2->put($dir . '/' . $file, $sftp->get($file));. Обратите внимание, что вам все еще, вероятно, нужно будет сделать $sftp2->mkdir($dir, 0777, true);.
@eubert: можете ли вы дать полное объяснение сценария.






Создание вашего скрипта:
<?php
set_include_path('lib/');
include "lib/Net/SFTP.php";
$sftp = new Net_SFTP('172.1.xxx.xx'); // source server
if (!$sftp->login('root', 'xxxx')) {
exit('login failed');
}
$sftp2 = new Net_SFTP('172.1.xxx.xx'); // destination server
if (!$sftp2->login('root', 'xxxx')) {
exit('login failed');
}
$sftp->chdir('/opt/oss/server/var/fileint/fm');
$files = $sftp->nlist('.', true);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
$dir = './Alarm/' . dirname($file);
if (!$sftp2->file_exists($dir)) {
$sftp2->mkdir($dir, 0777, true);
}
$sftp2->put($dir . '/' . basename($file), $sftp->get($file));
}
Это скопирует каталог с одного удаленного сервера на другой удаленный сервер. Обратите внимание: если вы хотите скопировать каталог с удаленного сервера на другой каталог на том же сервере, я бы просто повторно использовал объект $sftp вместо создания нового объекта $sftp2. Но это не казаться, как вы спрашиваете.
Спасибо за совет. Скрипт протестирован и отлично работает для копирования папки на другой сервер. но когда я перепроверяю только скопированную папку, файл внутри папки не копируется. prnt.sc/mxlznj
@ImanFirdaus - я обновил свой скрипт. В частности, я заменил $file на basename($file). Была также опечатка, в которой он делал $$sftp2 вместо $sftp. Наконец, в моих тестах пустые подкаталоги не копируются. Не сразу понятно, почему.
Почему вы закомментировали
mkdir? В любом случае, см. stackoverflow.com/a/36558913/569976