Мне нужно отправить zip-файл с PHP-сервера в приложение Electron, но я все еще не уверен, как это сделать напрямую.
Вот некоторые подходы, которые, я думаю, могут сработать.
План A: сервер запускает событие загрузки электронного приложения через сокетное соединение
PHP сервер отправляет сокет-сообщение в электронное приложение
function send($msg='', $port=2004, $host='127.0.0.1')
{
try {
$sock = fsockopen($host, $port, $errono, $errmsg, 30);
if ($errono != 0 && $errmsg != ''):
$error_msg = 'Socket Error: [' . $errono . '] ' . $errmsg;
error_log($error_msg);
$error_msg = 'Socket Error: unsent message is "' . $msg . '"';
error_log($error_msg);
else:
fputs($sock, $msg);
$c = fread($sock, 10);
return true;
endif;
} catch (Exception $e) {
}
return false;
}
Приложение Electron получает сообщение сокета и загружает zip-файл, обращаясь к URL-адресу zip-файла из сообщения сокета.
downloadItem : (item, iType, basepath, dlErr, dlComplete) =>
itemKey = null
itemUrl = null
if item?
if item.key?
itemKey = item.key
if item.url?
itemUrl = item.url
if downloader? and itemKey? and itemUrl?
fs = require('fs')
filePath = basepath + itemKey
try
fs.unlinkSync(filePath)
catch e
console.warn e
downloader.download(
itemUrl
iType
(err=null, data={}) =>
if err?
dlErr()
else
dlComplete()
(progress=0) =>
console.log('PROGRESS', progress)
=>
dlErr()
)
return item
План Б: PHP FTP PUT
PHP сервер отправляет файл напрямую по FTP.
Ниже приведен лишь пример, который я получил от https://shellcreeper.com/move-files-server-to-server-using-simple-php/
Кажется, работает, но я не уверен.
/**
* Transfer (Export) Files Server to Server using PHP FTP
* @link https://shellcreeper.com/?p=1249
*/
/* Remote File Name and Path */
$remote_file = 'files.zip';
/* FTP Account (Remote Server) */
$ftp_host = 'your-ftp-host.com'; /* host */
$ftp_user_name = '[email protected]'; /* username */
$ftp_user_pass = 'ftppassword'; /* password */
/* File and path to send to remote FTP server */
$local_file = 'files.zip';
/* Connect using basic FTP */
$connect_it = ftp_connect( $ftp_host );
/* Login to FTP */
$login_result = ftp_login( $connect_it, $ftp_user_name, $ftp_user_pass );
/* Send $local_file to FTP */
if ( ftp_put( $connect_it, $remote_file, $local_file, FTP_BINARY )){
echo "WOOT! Successfully transfer $local_file\n";
}else {
echo "Doh! There was a problem\n";
}
/* Close the connection */
ftp_close( $connect_it );
Хотя я могу составить план А, я хотел бы рассмотреть вопрос о том, существует ли какой-либо другой лучший подход к моему делу, прежде чем идти дальше.
Мои вопросы:
Любой другой лучший подход?
Что касается плана B, я до сих пор не могу понять, как заставить приложение Electron действовать как удаленный FTP-хост. Возможно ли даже электронное получение файла по FTP?
Любой пример кода, который может помочь, приветствуется. Спасибо!
Задача ещё не решена.
Других решений пока нет …