【チラ裏】メール受信起動からディレクトリが作れない【解決】

チラ裏のメモ書き

2018/03/02:追記 <!-- 割と重要な X-SERVER の仕様 -->
X-SERVERでも出来た。

Cronの場合とメール転送からのパイプ処理の場合はカレントディレクトリが
ホームディレクトリになってしまうので以下のような絶対パスにするか

/home/ユーザーID/ドメイン名/public_html/path1/path2/

相対パスの場合は以下のようにするか

./ドメイン名/public_html/path1/path2/

というパス指定をしてやらないとフォルダが作れないらしい。

includeファイルについてもCronやパイプ処理の場合は同様に上記のように
絶対パスにするか相対パスにしないと読み込んでくれない。
X-SERVERにはscriptディレクトリがpublic_htmlディレクトリの上位にあるのだが一般的に言う
includeディレクトリに当たる。(別にincludeディレクトリ作ってもいい)

その場合のパスの通し方は以下のようになる。

絶対パス
/home/ユーザーID/ドメイン名/script/
/home/ユーザーID/ドメイン名/include/

相対パス
./ドメイン名/script/
./ドメイン名/include/

これは公式にX-SERVERの仕様であると回答があったのでX-SERVERで
メール転送パイプ処理やCronを設定していて動かねー!ってなった人は
参考にして欲しい。ここまで辿り着くのに数日かかった・・・。

※なんか知らんがX-SERVERだと出来ない、kagoyaだと出来た。
2018/02/27:追記
X-SERVERに問合せしたら実行ファイルのパーミッション0705にしてくれと回答が来たけど0705にしても0777にしても失敗する。他のディレクトリのパーミッションを0777にしても作れない。kagoyaだと実行ファイルのパーミッションが0604でも作れる。kagoyaでパーミッションをイジったりはしてないけど作れる。X-SERVERの何が悪いのか解らん。これはユーザー側の問題なのか、サーバー側の問題なのか、php.iniとかの問題なのか、切り分けが全くできない。ボスケテ

ディレクトリが作成されない問題【解決】

  1. XServerのメール振り分け機能でhoge@foo.jp宛のメール受信を転送してpost.phpを実行
  2. post.phpは実行されていてデータベースへ必要なデータは保存されている
  3. mkdir();でディレクトリを作成しようとするがディレクトリの作成に失敗している
  4. post.phpimgディレクトリは同階層にある
// メール受信時に標準入力でメールデータを取得
    $buf = file_get_contents("php://stdin");

// データベースにメールアドレスの登録があれば$dir_idにユーザーIDを格納
    $dir_id = 'ユーザーIDを取得して格納';

// 画像格納フォルダ作成
    $dir_date = date("YmdHis", strtotime($Date));
    $dir_Add = "./img/$dir_id/";
    $dir_path = $dir_Add.$dir_date;
    if(file_exists($dir_Add)){ // 既にIDでフォルダがある場合
        if(file_exists($dir_path)){
            mkdir($dir_path, 0777, true);
        }else{
            chmod($dir_Add, 0777);
            mkdir($dir_path, 0777, true);
        }
    }else{ // フォルダ新規作成
        if(mkdir($dir_Add, 0777)){
            chmod($dir_Add, 0777);
            mkdir($dir_path, 0777, true);
        }
    }

作成したいディレクトリ:./img/ユーザーID/送信日時(YmdHis)/

  1. .txtファイルを読み込ませると.txtファイルのDate:フィールドにある日時ディレクトリがちゃんと作成される
// .txtファイルでメールデータを取得
    $buf = file_get_contents("original_msg.txt");

$buf.txtで取得すると思った通りの結果が出てディレクトリが作成される。
php://stdinで取得するとフォルダが作成されない。

問題の切り分けが全く出来ない。何が悪いのかも皆目見当が付かない深い闇にいます。

添付画像(attachment)のbase64共通開始が解らない問題【未解決】

特定のメーラー(iPhoneデコメーラー)であればfilename="attachment00.jpg"\nの次から添付画像のデータが始まるので特定出来るのだが他のメーラーは違うので添付画像のデータの始まりを特定出来ない問題。

こんなチラ裏な記事にアドバイス頂けたら非常に有難いです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.