PHPでrsyncを実行する方法とは?

このQ&Aのポイント
  • PHPでrsyncを実行する方法についての質問です。cronでの実行やWEBからの実行についても調査しましたがうまくいきません。どのように設定すればよいでしょうか?
  • rsyncをフルパスで指定したり、phpの所有者やオーナーをapacheに変更したりしてみましたが効果がありませんでした。suPHPを導入してみましたがうまくいきません。参考になる事例や解決方法を教えていただけないでしょうか?
  • CentOS5.3の環境でPHPでrsyncを実行したいです。現在、cronやWEBからの実行がうまくいきません。ソースコードや設定に問題があるのか、それとも他の要因が考えられるのか教えてください。
回答を見る
  • ベストアンサー

PHPでrsyncを実行したい

初めて質問します。 rsyncについての質問です。 通常は、cronで実行し緊急の際にWEBから実行できればと思い 次のようなソースを書いて実行してみました [synctest.php] ----------------------------------- <?php echo "SYNC START\r\n"; system('/usr/bin/rsync -avz --delete /usr/local/apache2/htdocs [送信先IP]:/usr/local/apache2'); echo "SYNC END\r\n"; ?> ----------------------------------- これをコンソール上から実行した場合問題なく動作します #>php synctest.php ソースをapacheの公開ディレクトリに配置し、ブラウザから実行した場合は全く動きません いろいろなサイトを調査し、rsyncをフルパスで指定したり phpの所有者やオーナーをapacheに変更したりしてみましたが変化がありません suPHPを導入すればうまくいくという情報を元に導入してみましたが設定がおかしいのかうまくいきません しかも従来のPHPが動作しなくなってしまいこちらは断念しました なにか参考例でも結構です 事例のようなものがありましたらご教示いただけませんでしょうか? よろしくお願いします --------------------------------- [主な環境:rootでログインし作業しています] CentOS5.3 httpd-devel-2.2.13-jason.3 httpd-2.2.13-jason.3 php-mysql-5.2.11-jason.1 php-devel-5.2.11-jason.1 php-common-5.2.11-jason.1 php-pdo-5.2.11-jason.1 php-ncurses-5.2.11-jason.1 php-cli-5.2.11-jason.1 php-xml-5.2.11-jason.1 php-mbstring-5.2.11-jason.1 php-5.2.11-jason.1 php-gd-5.2.11-jason.1 php-mysql-5.2.11-jason.1 mysql-5.0.77-3.el5 mysql-server-5.0.77-3.el5

  • LEMY
  • お礼率100% (2/2)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

sudoで実行する。 そのさいapacheの実行ユーザーにrsyncの実行を許可する。 ということで。

LEMY
質問者

お礼

回答ありがとうございます sudoというものを知らなかったので検索し いろいろと試行錯誤してみたところうまくいきました 参考までに作業内容を追記しておきます ********************************************************* コンソールからvisudoを実行 次のように編集 #Defaults requiretty ↑#をつける apache ALL = (ALL) NOPASSWD:/usr/bin/rsync ↑追記 保存終了 PHPスクリプトを次のように記述 ------------------------------------- <?php echo "START<BR />\r\n"; system('sudo /usr/bin/rsync -avz --delete /usr/local/apache2/htdocs [送信先IP]:/usr/local/apache2'); echo "END<BR />\r\n"; ?> ------------------------------------- **********************************************************

関連するQ&A

  • IE上からrsyncスクリプトを実行したい。

    目的:IEからrsyncスクリプトを実行してWEBサーバAとWEBサーバBの    同期を取り、データを同じにしたいです。    IEのURL欄部分へスクリプトまでのフルパスを入力、実行すると    同期が取れるようにしたいのです。        *現状はIE上では無く、サーバ上からrsyncスクリプトを実行     すると同期が取れます。     コマンド:./test/script/testrsync.pl     IE上からフルパスでtestrsync.plを実行すると     Internal Server Errorとなってしまい、下記のエラーログ     が出てしまいます。 apacheのエラーログ ----------------------------------------------------------- Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8] Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(463) [sender=2.6.8] [Mon Jun 1 00:00:00 2009] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /test/script/testrsync.pl ------------------------------------------------------------ rsyncスクリプト ------------------------------------------------------------ #!/usr/local/bin/perl $RSYNC_SCRIPT = "/usr/local/bin/rsync --rsync-path=/usr/local/bin/rsync"; $RSYNC_OPTION = "-azpq -e ssh --delete"; $RSYNC_SVUSER = "user\@serverb:"; $TEST_DIR = "/test/hogehoge"; $REAL_DIR = "/test/hogehoge"; $DEBUG = "debuglog.txt"; open(DEBUG,">$DEBUG"); @SYNCDIR = ( "root/", ); foreach $SYNC (@SYNCDIR){ $CMD = "$RSYNC_SCRIPT $RSYNC_OPTION $TEST_DIR/$SYNC $RSYNC_SVUSER$REAL_DIR/$SYNC"; system($CMD); } close(DEBUG); ------------------------------------------------------------ 現在はcronで定期的に自動更新がかかるようにしておりますが、 同期を取りたい時にIE上からフルパスでスクリプトを実行し サーバAからサーバBへ同期を取りたいです。 色々と調べているのですが、糸口が掴めない状態です。 どなたかお分かりになられればご教示頂きたいです。 よろしくお願い致します。

  • PHPモジュールが読み込めない?

    Linuxでサーバーを構築しようと思い、三日三晩試行錯誤してみたのですがどうしてもわからない事があるので質問させていただきます。 Apache、PHPのインストールはエラーなく行えたのですがPHPのインストール後、httpd.confにAddModule文を追加するとApache再起動時に指定したモジュールが見つからない節のエラーが出ます。 ApacheのModuleディレクトリやLibディレクトリ等を探してみたのですが.soファイルが見つかりません。 phpのconfigure時に「CGIとして動作します」的なメッセージが表示されてたのですがそのせいでしょうか? ./configure --prefix=/usr/local/php-5.2.1\ --enable-mbstring\ --with-apxs2=/usr/local/httpd/bin/apxs\ --with-mysql=/usr/local/mysql\ --with-gd --with-zlib --with-jpeg-dir 実行環境 FedoraCore6 Apache-2.2.4 PHP-5.2.1 PHP-4.4.6でもためしてみたのですがうまくいきませんでした。 どなたか原因がわかる方がいたらご教授お願いできませんでしょうか? 初歩的な事で申し訳ないのですがよろしくお願いします。

    • ベストアンサー
    • PHP
  • CentOS5.3に、apache2.2.15とphp5.3.2とmy

    CentOS5.3に、apache2.2.15とphp5.3.2とmysql5.0.45をインストールして、 phpで下記のプログラムを書いて、mysqlへ接続しようとしましたが、 Call to undefined function mysql_connectというエラーが表示されて、 接続できません。 ===================================================== <?php $con = mysql_connect("localhost"); if (!$con) { echo "Error:接続できませんでした"; }else{ echo "接続ID=$con"; } ?> ============================================== phpのconfigureのときに、 --with-mysql=/usr/local/mysqlを入れてないのですが、 mysqlはCentOS5.3をインストールしたときに、 同時にインストールしたものなので、/usr/local/mysql配下なんてありません。 この場合は、一度、mysqlをアンインストールしてから、 再度、ソースからmake installしないと、ダメなのでしょうか。 アンインストールする方法もちょっと不安なのですが、 $ rpm -qa | grep mysqlのコマンドで、 でてきた↓これを、rpm -eコマンドで、アンインストールして、 mysql-5.0.45-7.el5 libdbi-dbd-mysql-0.8.1a-1.2.2 mysql-connector-odbc-3.51.12-2.2 mysql-5.0.45-7.el5 mysql-server-5.0.45-7.el5 /usr/bin配下のmysql関連のファイルもrmコマンドで消すのでしょうか? ソースからmake installしてないので、/usr/local配下には、mysqlの ファイルは無いようですが、他にも、削除すべきファイルはありますでしょか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • apacheでphp、exec、system関数でのsudo実行

    FreeBSD 7.0-STABLE でphpスクリプトを作っています。 apacheは2.0.63、phpはphp-4.4.9です。 apacheの設定 ユーザ、グループは、apache phpは safe_mode = offです。 sudoは apache ALL=(ALL) ALL と設定しています。 apacheを手動で起動 /usr/local/apache2/bin/apachectl start して、下記を実行すると <?PHP $cmd = "echo 'password' | sudo -S ls /root"; exec($cmd, $output); print_r($output); ?> 結果、 Array ( [0] => .cshrc [1] => .history [2] => .k5login [3] => .login [4] => .profile [5] => .ssh ) とうまく実行できるのですが apacheを自動起動した場合、 以下の方法をそれぞれ試しましたが # cp /usr/local/apache2/bin/apachectl /usr/local/etc/rc.d/apache.sh # chmod 0755 /usr/local/etc/rc.d/apache.sh より起動 /etc/rc.local # Start Apache /usr/local/apache2/bin/apachectl start より起動 crontab -e @reboot /usr/local/apache2/bin/apachectl start より起動 いずれも 結果は Array ( ) とうまくいきません。 どなたか原因のわかる方、教えていただけないでしょうか? 宜しくお願いいたします。

  • PHPとMySQLが接続できません。(Linux環境)

    【状態】 ブラウザからサーバのPHPにアクセスした際、MySQLに接続してSelect文を流すスクリプト(仮にselect.phpとします)を作成しました。 しかしブラウザからドキュメントルート直下の同スクリプトにアクセスすると、 Fatal error: Call to undefined function mysql_connect() in [スクリプトのフルパス] on line 14 とエラー表示されてしまいます。 phpinfo()を確認したところ、MySQLのセクションがない状態。 他のWebページを参考にphp-mysqlモジュールをyumでインストールし、php.iniに   extension=mysql.so   extension=mysqli.so と   extension_dir = "/usr/lib/php/modules" の2行を追加しApacheを再起動しましたが、状態変わらずです。 ちなみにApacheとPHPはソースからインストールし、httpd.confもphp.iniも/usr/local/apache2/conf/以下に配置。 httpd.conf中に   PHPIniDir "/usr/local/apache2/conf" の表記もあり、MySQLに接続しないPHPは正常に処理されます。 また、mysql.so/mysqli.soも上記php.iniで指定した"/usr/lib/php/modules"に存在します。 何か原因として考えられる事はありますでしょうか。 心当たりのある方がいらっしゃいましたらアドバイスお願い致します。 【各バージョン ※インストールした順に表記】 OS:CentOS 5.2 (VMWare上で稼働) カーネル:2.6.18-92.el5 Apache:2.2.9 (ソースからコンパイル) PHP:5.2.6 (ソースからコンパイル) php-mysql:5.1.6 (yumでインストール) mysql:5.0.45 (yumでインストール) mysql-server:5.0.45 (yumでインストール) 以上、見にくくて申し訳ありませんが宜しくお願い致します。

    • ベストアンサー
    • PHP
  • httpd.confの場所とphp.iniの設定

    いつもお世話になっております。 ps auxww で表示したapacheが、/usr/sbin/httpd となっていた場合、 ここで動いているapacheのhttpd.confを正確に導く方法は、どのようになりますでしょうか。 これまで、apacheを調べるときには、 ・rpm -qa | grep apache もしくは、 /usr/local周りを調べていましたが、 apacheが/usr/local/で、複数稼動している場合、 または、/etc/httpd で動いているのか不明な場合、 どのconfをいじるべきかわからないためです。 また、httpd.confの場所がわかった場合、 phpがモジュールとして動いていた場合、 httpd.confに、LoadModule php5_module ・・・ となりますが、そのphp.iniの設定ファイルを導くには、 どのようにしたらよいでしょうか。 これまでは、phpが動くところで、phpinfoして、探していましたが、 それ以外に、いくつか方法を教えていただけると助かります。 最後に、php.iniを編集した後、正しくphp.iniが設定されているか(文法間違いがないか) どうかを確認するには、どうしたらよいでしょうか。 apacheでいう configtestみたいなものはありますでしょうか。 以上、たくさんで申し訳ございませんが、 何卒よろしくお願い致します。

  • いつもお世話になります。

    いつもお世話になります。 FreeBSD7.3に以下のソフトをインストールしようとしています。 ・Apache 1.3.42 ・PHP 5.2.13 インストールの方法は、http://php.net/manual/ja/install.unix.apache.phpの例1を参考にしています。 # /usr/local/apache/bin/apachectl start 上記の通りApacheを起動すると、以下のエラーが出てしまいます。対応策を教えて頂くと幸いです。 Syntax error on line 205 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/libphp5.so into server: /usr/local/apache/libexec/libphp5.so: Undefined symbol "ap_user_id" /usr/local/apache/bin/apachectl start: httpd could not be started 【実行した手順】 (1)Apacheのディレクトリで以下を実行しました。 # ./configure --enable-module=so # make # make install (2)PHPのディレクトリで以下を実行しました。 # ./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --enable-mbregex --enable-mbstring # make # make install (3)php.iniを移動   例のようなphp.ini-developmentは見当たりませんでした。 # cp php.ini-dist /usr/local/lib/php.ini (4)/usr/local/apache/conf/httpd.confを編集 ・LoadModule php5_module libexec/libphp5.soは自動的に追加されていました。 ・ClearModuleListが無かったので、AddModule mod_php5.cを記述していません。 ・AddTypeは元々AddTypeが記述してある辺りに記述しました。 以上、よろしくお願いします。

  • PHP実行時の警告について

    こんばんわよろしくお願いします。 aaacafeのレンタルサーバーでPHPのバージョンは4.2.3です。 Mysqlに接続して結果を一行づつ表示したいのですが 実行時に下記の2行警告が出てヘッダ部分しか表示しません。 自分で調べてぼんやりとは原因はわかったのですが、 具体的にどう直してよいかわかりません。 ご教示お願いします。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource 以下ソースです。 <?PHP $sql = ""; $sql .= "select * from LIVE"; $sql .= " ORDER BY DATE DESC"; ?> <HTML> <HEAD> <TITLE>接続テスト</TITLE> </HEAD> <BODY> <?php //SQL発行 $rs = mysql_query($sql, $conn); echo "<table cellSpacing=0 cellPadding=0>\n"; echo "<tr bgcolor=yellow>"; echo "<th >日付</th>"; echo "<th>ツアータイトル</th>"; echo "<th>会場</th>"; echo "<th>アーティスト</th>"; echo "</tr>\n"; ■この行→ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){ echo "<tr>\n"; echo "<td>" . _hs($rec['DATE']) . "</td>\n"; echo "<td>" . _hs($rec['TITLE']) . "</td>\n"; echo "<td>" . _hs($rec['PLACE']) . "</td>\n"; echo "<td>" . _hs($rec['ARTIST']) . "</td>\n"; echo "</tr>\n"; } //結果セットの解放 ■この行→ mysql_free_result( $rs ); //切断 mysql_close($conn); echo "</table>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • シェルスクリプトからPHP実行

    シェルスクリプト(bash)内で、以下のようにPHPを呼んだ場合、 その次の処理がPHPの終了を待たずに実行されるようなのですが、 どうしてでしょうか? #!\bin\bash /usr/local/php4/bin/php /home/test.php echo "test!" 以上 なぜか test! という表示がPHPの処理中に出るように思えます。

  • PHPのCGIモードとについて

    PHPのCGIモードとについて PHPのCGIモードというのがよく分かりません。 自分はcentOSにソースコードからPHPを入れております。 で、主にApacheと連携させています。 ただ、最近は #!/usr/local/bin/php -q などを最初に書いてコマンドラインからの使用が多くなっております。 自分は ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-freetype-dir=/usr/local/lib --with-gd --with-mysqli=/usr/local/mysql5.5/bin/mysql_config --with-pdo-mysql=/usr/local/mysql5.5 --with-mysql-sock=/var/lib/mysql/mysql.sock --with-zlib --with-xsl=/usr/lib --enable-mbregex --enable-mbstring --enable-bcmath --with-mcrypt --disable-posix-threads --enable-bcmath --with-readline --with-curl=/usr/local/curl --with-curlwrappers --with-openssl --with-openssl-dir=/usr/lib64/openssl --enable-pcntl のようにしているのですが、これでCGIモードにはなっているのでしょうか? いまいち概念が掴めないでおります。 具体的な事例や、CGIモードでない場合との違いなどを教えていただけないでしょうか? また、CGIモードにするために何かphp.ini等で設定をするような事があるのであれば、 どのようにしてCGIモードとして使えるようになるのかをアドバイスいただきたいと思います。

    • ベストアンサー
    • PHP

専門家に質問してみよう