dポイントプレゼントキャンペーン実施中!

レッツPHPさんの写メールBBSを使わせていただいています。
送られてきたメールを解析し画像とログを保存するプログラム(pop.php)だけを
使いPOP3サーバのアドレスやパスワードなど設定し、携帯から送信しました。
そしてpop.phpにアクセスするときちんと画像と送信内容が書き込まれました。

これを利用して、cronで一定時間にpop.phpを起動させているのですが、
保存も送信内容も書き込まれません。
また、cronとは別なアドレスを用意し指定する宛先にメールが届いたらpop.phpを起動するというのも試しましたが保存されません。

――――――――――
フォルダ構成です
pop.php  //受信・解析
data/s //画像
mail.cgi //送信内容保存ファイル
――――――――――

また、どちらも動いています。(動いているか確認するために自分宛にメールを送信する処理を加えてみました。)
WEBからアクセスするのとcronなどでプログラムを呼び出すのは違うのでしょうか。
エラーもなくWEBからアクセスすると保存されるので悩んでおります。
どなたかご教授いただけませんでしょうか。
よろしくお願い致します。

A 回答 (4件)

DBに接続するファイルがincludeされているとしても


そのファイルが何の変数を使用しているかは不明ですよね?
たとえば環境変数とか。
で、そういったファイルはよくPATH変数を見ていることが多いんですよ。

ですので、サーバでCRONを動かすときには、環境変数のPATHも
指定してあげるべきです。
ほとんどのDB接続ファイルは環境変数を使用しますから。

OSはlinuxかFreeBSDあたりですよね?
まず環境変数を表示しましょう。
ENVコマンドです。
その中でPATH=からはじまる記述があると思います。
その記述をCRONにも同じ内容でいれてあげてください。

こんな感じ
#!/bin/sh
PATH=環境変数のPATHの値
/home/***/public_html/***/pop.php

そんなことはないと思いますが、
/home/***/public_html/***/pop.php

の前にちゃんと時間指定はしてますよね?
    • good
    • 0
この回答へのお礼

$_ENV["PATH"];で($_SERVER["PATH"]も同じ値でした)
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
のように出たのでshファイルに追加しましたが、保存されませんでした。
同じくWebからアクセスすると保存されます。
試しにpop.phpの先頭にも
付け足してみましたが同じ結果です。

OSはFreeBSDでcronの時間も設定しています。

また、$log="./mail.cgi ";
$lines = @file($log);
というのがあり配列の中身をメールに送信して見ると
$lines0=$lines[0];
$lines1=$lines[1];
今送ったものと前回送った内容が表示されます。
(これは期待通りです)
しかし、mail.cgi のサイズはゼロで何も書き込まれていません。
実際にmail.cgi を開いていないという事でしょうか。
何度も申しわけありませんm(__)m

お礼日時:2007/01/26 22:05

失敗しているということは、何かしらエラーメッセージが届いていないでしょうか(postmaster宛等)


ファイル自体が見つからないという旨の英文とか実行したphp側で吐くエラー文とかです

ファイルが見つかっていないと届いたけどphpまでのパスが確実にあっているならば、
ディレクトリ構成の認識にずれが生じてる可能性があります

/home/***/public_html/***/pop.php
の部分を

cd /home/***/public_html/***/
./pop.php

もしくは

cd /home/***/public_html/***/; ./pop.php

に変更してみてください(cd -> チェンジディレクトリ)
もしかしたらこれで実行されるかも、です

詳しいことにはお答え出来る知識はないのですが、経験談として参考までに

この回答への補足

ご回答ありがとうございます。
設定をしている者に検証をお願いしているのですがまだの状態です。。
アドバイスいただいた内容を実行しましたら結果ご報告いたします。
よろしくお願いいたします。

補足日時:2007/02/03 17:33
    • good
    • 0
この回答へのお礼

せっかく回答いただいたのですが確かめることができない状態ですので
後ほど検証してみます。
ありがとうございました。

お礼日時:2007/03/01 18:04

ちょっと気になるのですが、shファイルに追加とはどういう


意味でしょうか?
何か違う気がします。
crontabコマンドで設定しているのですよね?

一般的にCRONの書式はこんな感じになるはずです。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
01 * * * * aaa.php

ちょっとcrontab -l と打って、
書いている中身を出してください。
そしてここに出してもらえますか?
都合の悪いところは伏せてもらってかまいません。
    • good
    • 0
この回答へのお礼

cronで呼び出すファイルはpop.shなのですがそこに追加しました。
>その記述をCRONにも同じ内容でいれてあげてください。
というところを理解していませんでした。すみません。

cronでの設定は他の者がしているのでcrontabの内容を表示してもらいました。

# /**/*** - root's crontab for FreeBSD
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/**
#
# rotate log files every hour, if necessary
0 * * * * root newsyslog
#
# do daily/weekly/monthly maintenance
1 3 * * * root periodic daily
15 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
#
# time zone change adjustment for wall cmos clock,
# does nothing, if you have UTC cmos clock.

よろしくお願いします。

お礼日時:2007/01/29 14:03

たぶん、CRONに設定した情報に不備があるのだと思います。


そして想像ですが、CRONを設定をした時にpop.phpの
パスを通しましたか?

どこにあるかというのはCRONはわかってくれません。
その情報も記載してあげないと駄目ですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

cronではshファイルを呼び出し
#!/bin/sh
/home/***/public_html/***/pop.php

pop.phpの先頭に
#!/usr/local/bin/php -q
というようにしています。

pop.phpでDBに接続するファイルをincludeしていますが、
DBに書き込まれいるのでpop.php以外はいいのかなと勘違いしていました。
足りない設定はどのよなものでしょうか。
よろしくお願いします。

お礼日時:2007/01/26 19:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!