globがcronで動作しない

このQ&Aのポイント
  • 新着メールをチェックするPHPスクリプトを作成しています。ブラウザからアクセスすると正常に動作しますが、cronで実行すると問題が発生します。特に、glob関数が正常に動作しないことがわかりました。
  • スクリプトやパスに問題はなく、対象ディレクトリの権限なども正常です。cronでの動作に関する参考情報や対処法が知りたいです。
  • PHPのスクリプトで、メールボックスのnewディレクトリをglob関数で取得し、メールの数を数えて未読があるかどうか判断する必要があります。しかし、cronで実行するとglob関数が正常に動作しません。どうすれば解決できるでしょうか?
回答を見る
  • ベストアンサー

globがcronで動作しません

新着メールをチェックするPHPスクリプトを作成しています。 PHPはver.5 メールサーバーはqmail のレンタルサーバーです。 目的のスクリプトは、メールボックスのnewディレクトリをglobした後、countでメール数を数え、 1以上なら未読有りと判断する。というものです。 簡単にソースを書くと以下です。 $result = count( glob( newディレクトリへのパス\* ) ); このスクリプトにブラウザからアクセスすると思い通りに動作するのですが、 cronで実行させるとうまく動作してくれません。 スクリプトをひとつずつ確認したところ、globがうまく動作していないことがわかりました。 ブラウザアクセスでは思い通りに動作するので、スクリプトやパスなどは間違っていないはずです。 対象ディレクトリがメールボックスなので、権限などの問題かと思いましたが、 どのように対処すればいいのかさっぱりわかりませんでした。 対処法あるいは参考になるサイトをご存知でしたら、教えてください。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

cronのユーザと記述したコマンドの内容は? rootなら環境変数がユーザとは違います。 cronで su - ユーザ名 -c "実行するコマンド" とか書かないと。

ka-kichi
質問者

補足

ご回答ありがとうございます。 やはりユーザー関連の情報が必要なんですね。 cronのユーザーを調べているのですがわかりません。すみません。 記述したコマンドとは、以下のことでいいのでしょうか。 0 8 * * * /bin/sh /~~/hoge.sh >/dev/null 2>&1 さっきの質問に書き忘れていたのですが、cronでシェルスクリプト(hoge.sh)を呼び出し、 シェルスクリプトからPHPを呼び出しています。 この場合、ユーザー名の指定はcrontabで行うのでしょうか?シェルスクリプト内で行うのでしょうか?

その他の回答 (1)

回答No.2

globに記述したディレクトリのパスなんですが、相対パスで書いてたりしませんか? PHPをコマンドラインから実行する場合、ホームディレクトリになる場所が、違ったりします。 絶対パスで記述したらなおりませんか。

ka-kichi
質問者

お礼

ご回答ありがとうございます。 パスは絶対パスで記述しておりますので大丈夫だと思います。

ka-kichi
質問者

補足

直接な解決ではありませんが、globを止め、opendirに変更したところ、うまくいきました。 ありがとうございました。

関連するQ&A

  • Linux + phpで2バイト文字のパス指定

    RedHatLinux4 update6 + Apache2.2.8 + php5.2.5でプログラムを作成しております。 //server/share/hogehoge を /opt/lampp/htdocs/share にcifsマウントして、サーバの"hogehoge"ディレクトリにある"補毛補毛"というディレクトリにアクセスできるようphpに記述したいのですが、うまくいかずに困っています。 /opt/htdocs/test.php ------------------------------------------------------------------- $glob="./hogehoge/補毛補毛"; chdir($glob);           //カレントディレクトリ移動 foreach (glob("*.xls") as $filepath) { echo "$filepath size " . filesize($filepath) . "\n"; } ------------------------------------------------------------------- 具体的には上記のようなソースを書いたのですがうまく動きませんでした。./hogehoge/までなら動くのですが、そこに2バイト文字を含めるとうまく動きません。 どうにかしてうまく動かす方法はありませんでしょうか。サーバ側のディレクトリ名を変更することはできません。 ご回答、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • cronで外部ファイルへアクセス

    はじめまして。分からない事あり、質問させて頂こうと、アカウントを取得いたしました。 cronが使える共有レンタルサーバー内に、ある簡単なメールが送信されるファイルを置きました。cronテストのために設置したファイルで、アクセスされるとメールが送信されるだけのものです。(ブラウザ経由でアクセスしてもメールが送信されます) そこで、以下のようなファイルを作成し、cronにて日時設定を行うと、正常にメールが配信されるまで確認いたしました。(mail.phpとは上記メール配信ファイルです) #!/bin/sh #PHP /usr/local/bin/php /~~~~~~/cron_test/mail.php exit 他方、あるレンタルサーバーを借りているのですが、そこではcronが使えません。 そこで、アクセスされたらPHPが働くファイル(access.phpとします)を置き、cronが使える上記サーバーで定期的にそのaccess.phpにアクセスしたらどうか?と考えに至りました。 要は、cronが使えない以下のサイト(ファイル)にcronを使ってアクセスしたいといった感じです。 http://○○○.com/access.php ここで質問なのですが、上記のような一連のcronの中で、mail.phpにあたるスクリプトはどのようなものになるのでしょうか? echo"<img src=\"http://○○○.com/access.php\">"; と記述しているのですが、失敗に終わってしまいます。 前置きが幾分長くなってしまいましたが、この外部ファイルをアクセスするためのソースが分からず困っている次第です。 お忙しい中恐縮ですが、アドバイスのほど宜しくお願い致します。

    • 締切済み
    • PHP
  • ディレクトリの分からないファイルのパスを調べる

    php 5.2.8 Linux です。 ディレクトリの分からないファイルのパスを調べたいです。 glob("*/ファイル名")やrealpath("*/ファイル名")などとしましたが 出てきません。ディレクトリにワイルドカードは使えないのでしょうか? 別の方法でも良いのでphpでディレクトリの分からないファイルのパスを調べる方法があればお教え願います。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • cronが実行されているのに動作しない

    phpファイルをcronで設定したのですが動作しません。 『cat /var/log/cron』にて確認をすると正常に実行されています。 実行はされているが、処理されないということになります。 何がだめなのでしょうか? cron設定 * * * * * /user/bin/php /var/www/public_html/test/mail/test.php test.php <?php require( '/var/www/private_html/test/data.php' ); $to_mail = "test@****.jp"; $m_title = "cronテスト"; $s_name = "メールテスト"; $return_mail = "test@****.jp"; mb_language( 'ja' ); mb_internal_encoding("utf-8") ; $subject = "$m_title"; $headers= "From:" .mb_encode_mimeheader( $s_name ) ."<" .$s_mail .">"; $return_path = '-f' . $return_mail; $body = "メール送信テスト\n\n"; mb_send_mail( $to_mail, $subject, $body, $headers, $return_path ); ?> 以上のphpファイルをcron設定しており、 URLを直接たたくとphpファイルは処理されることも 確認済みです。 cronからの実行だとなぜファイル処理がなされないのでしょうか? 原因がわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • cron は動作しているのですが、一部動作していない命令が・・

    cronでPHPファイルを定期動作させるようにしています。下記はそのPHPファイルの内容です。 上部の「メールの送信」は時間通りされるのですが、下部の関数「fsockopenやfputs」あたりが動作していないようなのです。 このPHPファイルをURL打ち込みしてブラウザに表示すると、目的とおりの動作をしますのでソースのミスではないようです。cronでfsockopenは動作しないとか・・あるのでしょうか。ちなみにfsockopenで行いたいのは指定のURLにパラメーターを送る動作です。 //----メールの送信----- //言語の設定 mb_language(\"japanese\"); mb_internal_encoding(\"Shift_JIS\"); //登録メールの送信 $to=\"aaaa@aaa.jp\"; $subject=\"時間動作確認\"; $message=\"動いてますよ!\"; $header=\"from:info@aaa.jp\"; $send_mail=mb_send_mail(\"$to\",\"$subject\",\"$message\",\"$header\");   ( 中 略 ) //クエリメソッドを作成 $url = \"http://xxx.jp/aaa/bbb.php //リクエストラインを作成 $request = GET.\" \".$url.\" HTTP/1.0\\r\\n\"; $request .= \"Host: \".$URL[\'host\'].\"\\r\\n\"; $request .= \"User-Agent: PHP/\".phpversion().\"\\r\\n\"; $request .= \"\\r\\n\"; //WEBサーバへ接続 $fp = fsockopen(\"xxx.jp\", 80); //接続に失敗した時の処理 if (!$fp) { die(\"ERROR\\n\"); } //要求データ送信 fputs($fp, $request); //接続を終了 fclose($fp); 説明が下手ですいません。 どうしたら指定のURLにパラメーターを送れるのでしょうか・・。 どなたかお助けいただけませんでしょうか。 お願いします。。

    • 締切済み
    • PHP
  • cronが動かない

    cronからphpスクリプトを動かそうと設定したのですが動きません。 エラーメールやエラー表示もされません。 phpスクリプト自体は、cronを使わず手動なら動作しています。 どこか設定に異常個所などがあればご指摘やアドバイスなど頂きたいと思います。 以下に設定内容を記載します。 【crontab】 # crontab -u testuser -e 0-59/5 * * * * /usr/bin/php -q /home/testuser/public_html/mail.php 2>&1 0-59/10 * * * * /usr/bin/php -q /home/testuser/private_html/mail.php 2>&1 【cron確認】 # ls -l /var/spool/cron/ -rw------- 1 root root 251 4月 17 15:25 testuser -rw------- 1 root root 71 4月 16 18:28 root 【mail.php】 #!/usr/bin/php <?php $tim = time(); $today = gmdate("Y/m/d(D)",$tim+9*60*60); $now = gmdate("Y/m/d(D) H:i",$tim+9*60*60); mb_language("Ja") ; mb_internal_encoding("EUC-JP") ; $mailto="test@****.jp"; $mailfrom = "From:" .mb_encode_mimeheader("cronテスト") ."<" . $mailto .">"; $parameters = '-f' . $mailto; $return_path = "$mailto"; $subject="テストメール"; $body ="クーロンテスト\n"; $body .="送信年月日: $today \n"; $body .="送信時間: $now \n"; mb_send_mail( $mailto, $subject, $body, $mailfrom,"-f $return_path" ); ?> 【パーミッション】 /home/testuser/public_html/  705 /home/testuser/private_html/ 705 /home/testuser/public_html/mail.php 705 /home/testuser/private_html/mail.php 705 rootユーザーでのcronは正常に動いています。 ご教授の程、宜しくお願い致します。

  • 「ディレクトリゲイト」でPHPを動作させられますか?

    初めまして。 現在「ディレクトリゲイト」を利用して会員サイトを運営しておりますが、会員のページからPHPを利用したいと思っています。http://www.webpower.jp/websofts/others/web_protection/directory_gate/ ディレクトリゲイトでPHPを動作させることはできますでしょうか。 CGIは実行できるので、 PHPをcgiとしてして作動させれば!  と思い、スクリプトの先頭に #!/usr/local/bin/php を記入し、拡張子を.phpから.cgiにして いろいろ試してみましたが、うまくいきませんでした。 専用サーバを利用しているので、設定はいろいろ変更することが できると思います。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • cronでバックアップ

    centファイルサーバーA からWindowsServerファイルサーバーへ バックアップを取る際に cronを使ってシェルスクリプトを書いてバックアップをすればいいというところまでは調べましたが、 シェルスクリプトの中に記述するコマンドは何を使用したらいいでしょうか? 最初に全てのファイルをバックアップ、その後毎日1回差分バックアップを計画しています。 またグループでアクセス制御をしているディレクトリもあります。 選択肢が多すぎて、どれが比較的シンプルでスマートなやり方なのかの手がかりにしたいと 思っております。 よろしくお願いします

  • Cronでのカレントディレクトリについて

    3日前からVine Linuxを初めてインストールしまして、 自宅サーバをやろうとしている、初心者です。 これまではxrea.comのレンタルスペースを借りてphpでコンテンツを作っていました。 phpをCronを使って、定期的実行する際に [シェルファイル] #!/bin/sh #PHP /usr/bin/php /var/www/html/filename.php exit のようにしてファイル操作をするphpを実行させたのですが [filename.php] <?php $fp=fopen("../data/dat.txt","w"); fputs($fp,$data); fclose($fp); ?> で実行したところURLからは問題なく dat.txt の内容を編集することができるのですが cronからだと PHP Warning: fopen(../data/data.txt): failed to open stream: No such file or directory となります。 そこでカレントディレクトリを調べると /root/PHPs/ となっていたので、そのようなエラーになっていました (1)カレントディレクトリを変更するコードを毎回phpに組み込む (2)フルパスでファイルを指定する ことでこのトラブルは回避されるのですが、 xrea.comでは、相対パス、カレントディレクトリを毎回指定しなくても、実行できていました。 cronでphpを実行する際に、phpが存在するディレクトリへ 自動でカレントディレクトリを移動するようにしたいです。 そのような方法があれば、教えてくください。

  • ファイルの削除について ( unlink )

    perl プログラミング 2日目の初心者です。 以下のようなスクリプトを書いて test.cgi とかで $del_count = unlink glob("msg-*.txt"); 保存し、ブラウザーでアクセスすると、ちゃんと ファイルが削除されるのですが、 シェル上で実行すると、以下のようなメッセージ glob failed (child exited with status 1) at test.cgi line 5. とか出て削除ができないのです。 パーミッションも 755 とかで試したのですが、 どうしてなのでしょうか・・・うんうん煮詰まって います。

    • ベストアンサー
    • CGI