前提・実現したいこと
php5.1で動いていた同期アプリをphp7.3環境で動作確認を行っています。
機能としては、testディレクトリをwwwディレクトリへ同期、wwwディレクトリの変更前のデータをbackupディレクトリへ同期してバックアップします。
ブラウザ上で同期ボタンを押すと、"同期作業は完了しました"と出るが、実際にディレクトリをみると同期がされていない状況です。
発生している問題・エラーメッセージ
ブラウザ上からのリクエストでディレクトリの同期ができない。
該当のソースコード
php
1//rsync.php 2<?php 3 4define('SRC_DIR', '/xxx/xxx/test/data/'); 5define('DST_DIR', '/xxx/xxx/www/data/'); 6define('BAK_DIR', '/xxx/xxx/test/backup/'); 7 8//ブログ 9define('SRC_BLOG_DIR', '/xxx/xxx/test/data/official-blog/'); 10define('DST_BLOG_DIR', '/xxx/xxx/www/data/official-blog/'); 11define('SRC_SP_BLOG_DIR', '/xxx/xxx/test/data/sp/official-blog/'); 12define('DST_SP_BLOG_DIR', '/xxx/xxx/www/data/sp/official-blog/'); 13define('SRC_MOBILE_BLOG_DIR', '/xxx/xxx/test/data/m/official-blog/'); 14define('DST_MOBILE_BLOG_DIR', '/xxx/xxx/www/data/m/official-blog/'); 15 16/* 全て同期する場合 */ 17$excludeTbl = array( 18'/atk/', 19'/speakforannex/', 20'/tweets.xml', 21//'/cmn/', 22'/l.html', 23'/ipimage/', 24'/inquiry/', 25'.htaccess', 26'.htpasswd', 27 ); 28/* ブログ以外を同期する場合 */ 29$excludeTbl02 = array( 30'/official-blog/', 31'/sp/official-blog/', 32'/m/official-blog/', 33'/atk/', 34'/speakforannex/', 35'/tweets.xml', 36//'/cmn/', 37'/l.html', 38'/ipimage/', 39'/inquiry/', 40'.htaccess', 41'.htpasswd', 42 ); 43/* 44$excludeTbl = array( 45'rsync3.php', 46 ); 47$excludeTbl02 = array( 48'rsync3.php', 49'rsync2.php', 50 ); 51*/ 52$isSync = false; 53 54//echo "<pre>"; print_r($_POST);echo "</pre>"; 55 56/* 全て同期する */ 57if (isset($_POST['allsync'])) { 58 // 同期前のバックアップ処理 59 $command = 'rsync -Hax --delete ' . DST_DIR . ' ' . BAK_DIR; 60 print $command; 61 print "<br / >\n"; 62 exec($command); 63 // 同期処理 64 $command = 'rsync -Haxv --delete '; 65 // 対象外ファイルをコマンドにマージ 66 foreach ($excludeTbl as $pattern) { 67 $command .= '--exclude=\'' . $pattern . '\' '; 68 } 69 $command .= SRC_DIR . ' ' . DST_DIR 70 . ' 1> /xxx/xxx/test/data/atk/_rsynclog/rsync_full.log 2>&1 '; 71 //exit; 72 exec($command); 73 $isSync = true; 74} elseif (isset($_POST['notallsync'])) { 75 /* ブログ以外を同期する */ 76 // バックアップ処理 77 $command = 'rsync -Hax --delete ' . DST_DIR . ' ' . BAK_DIR; 78 print $command; 79 print "<br / >\n"; 80 exec($command); 81 // 同期処理 82 $command = 'rsync -Haxv --delete '; 83 // 対象外ファイルをコマンドにマージ 84 foreach ($excludeTbl02 as $pattern) { 85 $command .= '--exclude=\'' . $pattern . '\' '; 86 } 87 $command .= SRC_DIR . ' ' . DST_DIR 88 . ' 1> /xxx/xxx/test/data/atk/_rsynclog/rsync_notfull.log 2>&1 '; 89 print $command; 90 print "<br / >\n"; 91 //exit; 92 exec($command); 93 $isSync = true; 94} elseif (isset($_POST['blogsync'])) { 95 /* ブログのみ同期する */ 96 97 // バックアップ処理 98 $command = 'rsync -Hax --delete ' . DST_DIR . ' ' . BAK_DIR; 99 print $command; 100 print "<br / >\n"; 101 //exit; 102 103 exec($command); 104 // 同期処理 PCオフィシャルブログ 105 $command = 'rsync -Haxv --delete '; 106 $command .= SRC_BLOG_DIR . ' ' . DST_BLOG_DIR 107 . ' 1> /xxx/xxx/test/data/atk/_rsynclog/rsync_blog_pc.log 2>&1 '; 108 //exit; 109 exec($command); 110 // 同期処理 SPブログ 111 $command = 'rsync -Haxv --delete '; 112 $command .= SRC_SP_BLOG_DIR . ' ' . DST_SP_BLOG_DIR 113 . ' 1> /xxx/xxx/test/data/atk/_rsynclog/rsync_blog_sp.log 2>&1 '; 114 //exit; 115 exec($command); 116 // 同期処理 MOBILEブログ 117 $command = 'rsync -Haxv --delete '; 118 $command .= SRC_MOBILE_BLOG_DIR . ' ' . DST_MOBILE_BLOG_DIR 119 . ' 1> /xxx/xxx/test/data/atk/_rsynclog/rsync_blog_mobile.log 2>&1 '; 120 //exit; 121 exec($command); 122 123 $isSync = true; 124} 125 126print '<?xml version="1.0" encoding="UTF-8"?>'; 127?> 128<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 129<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> 130<head> 131<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 132<meta http-equiv="Content-Style-Type" content="text/css" /> 133<meta http-equiv="Content-Script-Type" content="text/javascript" /> 134<title>abahouse.co.jp 同期ツール</title> 135<?php if (!$isSync): ?> 136<script type="text/javascript"> 137//<![CDATA[ 138window.onload = function() 139{ 140 var form = document.forms[0]; 141 form.onsubmit = function() 142 { 143 if (confirm("同期を実行しますか?")) { 144 return true; 145 } 146 return false; 147 }; 148}; 149//]]> 150</script> 151<?php endif ?> 152</head> 153<body> 154<?php if ($isSync): ?> 155<p>同期作業が完了しました。</p> 156<p><a href="./rsync.php">←戻る</a></p> 157<?php else: ?> 158<form action="<?php print htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES); ?>" method="post"> 159<input type="hidden" name="test" value="1"> 160<p>※同期を実行すると、1〜3分程度で test から www に同期を完了いたします。</p> 161<p><input type="submit" name="allsync" value="全て同期する" /></p> 162<p><input type="submit" name="notallsync" value="ブログ以外を同期する" /></p> 163<p><input type="submit" name="blogsync" value="ブログのみ同期する" /></p> 164</form> 165<?php endif ?> 166</body> 167</html>
試したこと
コマンドでは同様のrsyncを実行したところ、問題なく動きます。
testおよびwwwでディレクトリの権限は777で変更済みです。
補足情報(FW/ツールのバージョンなど)
Cent OS 8.2
PHP 7.3
Apache 2.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。