com web/rmtools: Upload to two FTP servers: include/Tools.php

From: Date: Thu, 27 Feb 2020 10:38:08 +0000
Subject: com web/rmtools: Upload to two FTP servers: include/Tools.php
Groups: php.webmaster 
Request: Send a blank email to php-webmaster+get-28540@lists.php.net to get a copy of this message
Commit: 25bd6ae8dd0d4798ca20ccf94794d41c3d87f0f9 Author: Christoph M. Becker <cmbecker69@gmx.de> Thu, 27 Feb 2020 11:38:08 +0100 Parents: a630bada1e8612cc42306f97c80396c96acb22e1 Branches: server-migration Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=25bd6ae8dd0d4798ca20ccf94794d41c3d87f0f9 Log: Upload to two FTP servers We are planning to migrate windows.php.net to a new server. During the migration period, we want the uploads to go to both the current and the new machine. We accomplish that by having an additional credentials file (credentials_ftps2.php), and running the upload routines twice.. Changed paths: M include/Tools.php

diff --git a/include/Tools.php b/include/Tools.php index 7084b01..12b9f9d 100644 --- a/include/Tools.php +++ b/include/Tools.php @@ -127,25 +127,26 @@ function upload_file($src, $target) function upload_file_curl($src, $target) // SAZ - Like upload_file(), but using curl { - include __DIR__ . '/../data/config/credentials_ftps.php'; - $ftp_user = $user_snaps; - $ftp_password = $password; - - $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}/${target}"; - $fp = fopen($src, "rb"); - - $ch = curl_init(); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - curl_setopt($ch, CURLOPT_URL, $remoteurl); - curl_setopt($ch, CURLOPT_UPLOAD, 1); - curl_setopt($ch, CURLOPT_INFILE, $fp); - curl_setopt($ch, CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); - if (curl_exec($ch) === false) { - echo "Error, upload_file_curl(): " . curl_error($ch) . "\n"; - return false; + foreach (['credentials_ftps', 'credentials_ftps2'] as $credentials_ftps) { + include __DIR__ . "/../data/config/$credentials_ftps.php"; + $ftp_user = $user_snaps; + $ftp_password = $password; + + $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}/${target}"; + $fp = fopen($src, "rb"); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_URL, $remoteurl); + curl_setopt($ch, CURLOPT_UPLOAD, 1); + curl_setopt($ch, CURLOPT_INFILE, $fp); + curl_setopt($ch, CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); + if (curl_exec($ch) === false) { + echo "Error, upload_file_curl(): " . curl_error($ch) . "\n"; + return false; + } + fclose($fp); } - fclose($fp); - return true; } @@ -165,100 +166,102 @@ function update_snapshot_page() function upload_build_result_ftp_curl($src_dir, $target) { - include __DIR__ . '/../data/config/credentials_ftps.php'; + foreach (['credentials_ftps', 'credentials_ftps2'] as $credentials_ftps) { + include __DIR__ . "/../data/config/$credentials_ftps.php"; - $ftp = ftp_ssl_connect($ftp_server); - if (!$ftp) { - echo "Cannot connect to $ftp_server\n"; - return false; - } - $login_result = ftp_login($ftp, $user_snaps, $password); - if (!$login_result) { - return false; - } - - $try = 0; - do { - $status = ftp_make_directory($ftp, $target. '/logs'); - $try++; - } while ( $status === false && $try < 10 ); - ftp_close($ftp); + $ftp = ftp_ssl_connect($ftp_server); + if (!$ftp) { + echo "Cannot connect to $ftp_server\n"; + return false; + } + $login_result = ftp_login($ftp, $user_snaps, $password); + if (!$login_result) { + return false; + } + + $try = 0; + do { + $status = ftp_make_directory($ftp, $target. '/logs'); + $try++; + } while ( $status === false && $try < 10 ); + ftp_close($ftp); - $curl = array(); + $curl = array(); - $ftp_path = $target; - $ftp_user = $user_snaps; - $ftp_password = $password; + $ftp_path = $target; + $ftp_user = $user_snaps; + $ftp_password = $password; - if ($ftp_path[0] != '/') { - $ftp_path = '/' . $ftp_path; - } - $mh = \curl_multi_init(); + if ($ftp_path[0] != '/') { + $ftp_path = '/' . $ftp_path; + } + $mh = \curl_multi_init(); - $files = glob($src_dir . '/*.{zip,json}', GLOB_BRACE); - foreach ($files as $i => $local_file) { + $files = glob($src_dir . '/*.{zip,json}', GLOB_BRACE); + foreach ($files as $i => $local_file) { - $curl[$i] = $ch = \curl_init(); - $fp = fopen($local_file, "rb"); - $local_file = basename($local_file); + $curl[$i] = $ch = \curl_init(); + $fp = fopen($local_file, "rb"); + $local_file = basename($local_file); - $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/${local_file}"; + $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/${local_file}"; - \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - \curl_setopt($ch, CURLOPT_URL, $remoteurl); - \curl_setopt($ch, CURLOPT_UPLOAD, 1); - \curl_setopt($ch, CURLOPT_INFILE, $fp); - \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); + \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + \curl_setopt($ch, CURLOPT_URL, $remoteurl); + \curl_setopt($ch, CURLOPT_UPLOAD, 1); + \curl_setopt($ch, CURLOPT_INFILE, $fp); + \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); - \curl_multi_add_handle ($mh, $ch); - } + \curl_multi_add_handle ($mh, $ch); + } - $files = glob($src_dir . '/logs/*.*'); - $offset = $i + 1; - foreach ($files as $i => $local_file) { + $files = glob($src_dir . '/logs/*.*'); + $offset = $i + 1; + foreach ($files as $i => $local_file) { - $ch = $curl[$offset + $i] = \curl_init(); - $fp = fopen($local_file, "rb"); - $local_file = basename($local_file); + $ch = $curl[$offset + $i] = \curl_init(); + $fp = fopen($local_file, "rb"); + $local_file = basename($local_file); - $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/logs/${local_file}"; + $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/logs/${local_file}"; - \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - \curl_setopt($ch, CURLOPT_URL, $remoteurl); - \curl_setopt($ch, CURLOPT_UPLOAD, 1); - \curl_setopt($ch, CURLOPT_INFILE, $fp); - \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); + \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + \curl_setopt($ch, CURLOPT_URL, $remoteurl); + \curl_setopt($ch, CURLOPT_UPLOAD, 1); + \curl_setopt($ch, CURLOPT_INFILE, $fp); + \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); - \curl_multi_add_handle ($mh, $ch); - } + \curl_multi_add_handle ($mh, $ch); + } - $retry = 0; - do { - $err = 0; + $retry = 0; do { - \curl_multi_exec($mh,$active); - $info = curl_multi_info_read($mh); - if ($info !== false) { - curl_multi_remove_handle($mh, $info['handle']); - if ($info['result'] != 0) { - $err = 1; -// echo curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL) . "\n"; -// echo curl_error($info['handle']) . "\n\n"; - curl_multi_add_handle($mh, $info['handle']); + $err = 0; + do { + \curl_multi_exec($mh,$active); + $info = curl_multi_info_read($mh); + if ($info !== false) { + curl_multi_remove_handle($mh, $info['handle']); + if ($info['result'] != 0) { + $err = 1; +// echo curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL) . "\n"; +// echo curl_error($info['handle']) . "\n\n"; + curl_multi_add_handle($mh, $info['handle']); + } } + } while ($active); + $retry++; + } while ($err != 0 && $retry < 10); + + foreach ($curl as $ch) { + \curl_multi_remove_handle($mh, $ch); + if (\curl_errno($ch) != 0) { + echo \curl_error($ch) . "\n"; } - } while ($active); - $retry++; - } while ($err != 0 && $retry < 10); - - foreach ($curl as $ch) { - \curl_multi_remove_handle($mh, $ch); - if (\curl_errno($ch) != 0) { - echo \curl_error($ch) . "\n"; + \curl_close($ch); } - \curl_close($ch); + //\curl_multi_close($mh); } - //\curl_multi_close($mh); return true; } @@ -373,101 +376,103 @@ function xmail($from, $to, $subject, $text, array $attachment = array()) function upload_pecl_pkg_ftp_curl($files, $logs, $target) { - include __DIR__ . '/../data/config/credentials_ftps.php'; + foreach (['credentials_ftps', 'credentials_ftps2'] as $credentials_ftps) { + include __DIR__ . "/../data/config/$credentials_ftps.php"; - $ftp = ftp_ssl_connect($ftp_server); - if (!$ftp) { - echo "Cannot connect to $ftp_server\n"; - return false; - } - $login_result = ftp_login($ftp, $user_pecl, $password_pecl); - if (!$login_result) { - return false; - } - - $try = 0; - do { - $status = ftp_make_directory($ftp, $target . '/logs/'); - $try++; - } while ( $status === false && $try < 10 ); - ftp_close($ftp); + $ftp = ftp_ssl_connect($ftp_server); + if (!$ftp) { + echo "Cannot connect to $ftp_server\n"; + return false; + } + $login_result = ftp_login($ftp, $user_pecl, $password_pecl); + if (!$login_result) { + return false; + } + + $try = 0; + do { + $status = ftp_make_directory($ftp, $target . '/logs/'); + $try++; + } while ( $status === false && $try < 10 ); + ftp_close($ftp); - $curl = array(); + $curl = array(); - $ftp_path = $target; - $ftp_user = $user_pecl; - $ftp_password = $password_pecl; + $ftp_path = $target; + $ftp_user = $user_pecl; + $ftp_password = $password_pecl; - if ($ftp_path[0] != '/') { - $ftp_path = '/' . $ftp_path; - } - $mh = \curl_multi_init(); + if ($ftp_path[0] != '/') { + $ftp_path = '/' . $ftp_path; + } + $mh = \curl_multi_init(); - $files = is_array($files) ? $files : array($files); - $offset = 0; - foreach ($files as $i => $local_file) { + $files = is_array($files) ? $files : array($files); + $offset = 0; + foreach ($files as $i => $local_file) { - $curl[$i] = $ch = \curl_init(); - $fp = fopen($local_file, "rb"); - $local_file = basename($local_file); + $curl[$i] = $ch = \curl_init(); + $fp = fopen($local_file, "rb"); + $local_file = basename($local_file); - $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/${local_file}"; + $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/${local_file}"; - \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - \curl_setopt($ch, CURLOPT_URL, $remoteurl); - \curl_setopt($ch, CURLOPT_UPLOAD, 1); - \curl_setopt($ch, CURLOPT_INFILE, $fp); - \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); + \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + \curl_setopt($ch, CURLOPT_URL, $remoteurl); + \curl_setopt($ch, CURLOPT_UPLOAD, 1); + \curl_setopt($ch, CURLOPT_INFILE, $fp); + \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); - \curl_multi_add_handle ($mh, $ch); - $offset++; - } + \curl_multi_add_handle ($mh, $ch); + $offset++; + } - $files = is_array($logs) ? $logs : array($logs); - foreach ($files as $i => $local_file) { + $files = is_array($logs) ? $logs : array($logs); + foreach ($files as $i => $local_file) { - $ch = $curl[$offset + $i] = \curl_init(); - $fp = fopen($local_file, "rb"); - $local_file = basename($local_file); + $ch = $curl[$offset + $i] = \curl_init(); + $fp = fopen($local_file, "rb"); + $local_file = basename($local_file); - $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/logs/${local_file}"; + $remoteurl = "ftps://" . urlencode($ftp_user) . ":" . urlencode($ftp_password) . "@${ftp_server}${ftp_path}/logs/${local_file}"; - \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - \curl_setopt($ch, CURLOPT_URL, $remoteurl); - \curl_setopt($ch, CURLOPT_UPLOAD, 1); - \curl_setopt($ch, CURLOPT_INFILE, $fp); - \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); + \curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + \curl_setopt($ch, CURLOPT_URL, $remoteurl); + \curl_setopt($ch, CURLOPT_UPLOAD, 1); + \curl_setopt($ch, CURLOPT_INFILE, $fp); + \curl_setopt($ch , CURLOPT_USERPWD, $ftp_user . ':' . $ftp_password); - \curl_multi_add_handle ($mh, $ch); - } + \curl_multi_add_handle ($mh, $ch); + } - $retry = 0; - do { - $err = 0; + $retry = 0; do { - \curl_multi_exec($mh,$active); - $info = curl_multi_info_read($mh); - if ($info !== false) { - curl_multi_remove_handle($mh, $info['handle']); - if ($info['result'] != 0) { - $err = 1; -// echo curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL) . "\n"; -// echo curl_error($info['handle']) . "\n\n"; - curl_multi_add_handle($mh, $info['handle']); + $err = 0; + do { + \curl_multi_exec($mh,$active); + $info = curl_multi_info_read($mh); + if ($info !== false) { + curl_multi_remove_handle($mh, $info['handle']); + if ($info['result'] != 0) { + $err = 1; +// echo curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL) . "\n"; +// echo curl_error($info['handle']) . "\n\n"; + curl_multi_add_handle($mh, $info['handle']); + } } + } while ($active); + $retry++; + } while ($err != 0 && $retry < 10); + + foreach ($curl as $ch) { + \curl_multi_remove_handle($mh, $ch); + if (\curl_errno($ch) != 0) { + echo \curl_error($ch) . "\n"; } - } while ($active); - $retry++; - } while ($err != 0 && $retry < 10); - - foreach ($curl as $ch) { - \curl_multi_remove_handle($mh, $ch); - if (\curl_errno($ch) != 0) { - echo \curl_error($ch) . "\n"; + \curl_close($ch); } - \curl_close($ch); + //\curl_multi_close($mh); } - //\curl_multi_close($mh); return true; }
« previous php.webmaster (#28540) next »