質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

2回答

2290閲覧

ブラウザ上からrsyncで同期ができない

youplus40

総合スコア19

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2020/11/13 10:24

前提・実現したいこと

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分程度で&nbsp;test&nbsp;から&nbsp;www&nbsp;に同期を完了いたします。</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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

apacheユーザーに所有者を変更する必要がありました。
下記コマンドで変更し、問題なく機能しました。

//コマンド chown -R apache:apache www chown -R apache:apache test

投稿2020/11/16 07:47

youplus40

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php5.1で動いていた同期アプリをphp7.3環境

まず$commandの中身を表示していますので、正しく表示されるかチェックして下さい
execで実行していますが、rsync以外の外部コマンドの実行が実行できるか確認してください
rsyncコマンド自体がパスなしなのでフルパス指定してください
外部コマンドをうけつけてそうなら最悪sudoを絡めてください

投稿2020/11/13 11:20

yambejp

総合スコア116734

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

youplus40

2020/11/16 07:45

回答ありがとうございます。 具体的な確認手順をお教えいただきありがとうございます。 しかしながら、sudoを行ってもうまく機能しませんでした。 原因を調べた結果、該当フォルダの所有者をapacheに変更していなかったためでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問