• ベストアンサー

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が存在するディレクトリへ 自動でカレントディレクトリを移動するようにしたいです。 そのような方法があれば、教えてくください。

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

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

たとえばこんな感じ? <?php $path=realpath(dirname( __FILE__)); $filename="../data/dat.txt"; $filename=$path."/".$filename; $fp=fopen($filename,"w"); fputs($fp,$data); fclose($fp); ?>

widoww
質問者

お礼

はじめての質問の書き込みでしたので、返事がくるか不安でした。 お返事を頂きありがとうございます。 上のソースでうまくいきました。 ありがとうございます。^^ また、このようなコードを打たないで なんというか、自動的にphpを実行する際にカレントディレクトリを帰られるものがないのかなぁとおもっています。 えと、つまり、phpに記述しなくても、 PCのほうでphpを実行する際に、カレントディレクトリを自動で プログラムの存在する位置に移動させる設定(cron側での設定?)みたいなものがあるんじゃないだろうかと思っています。 ご存知でしたら、ご教示いただきたいです。 よろしくお願いいたします。

その他の回答 (2)

noname#39970
noname#39970
回答No.3

>プログラムを実行する際に だからシェル側でやったら? 有るんだし /usr/bin/php /var/​www/html/filename.php​ ↓ (飽くまでも参考ね) cd /var/www/html /usr/bin/php ./filename.php

widoww
質問者

お礼

ありがとうございます。 よく、わからなかったのですが、調べたところ PHPのCLI版だとカレントディレクトリが自動で移動しないようなので、自分が求めていることをやろうとするとCGI版を導入する必要があるのかな?と勝手に想像してます。

noname#39970
noname#39970
回答No.2

シェル側で cd で必ず作業場所に移動させたら?

widoww
質問者

お礼

お返事ありがとうございます。^^ 初心者なので、見当違いなことをいっているのかもしれませんが、 cdで一回一回移動させるのは大変なきがしまして;; プログラムを実行する際に、作業(実行)場所に自動で移動するような(cron側とかOSサイド)設定はないのでしょうか? それっぽいキーワードで WEBで検索をかけてみたのですが、みつからなくて、 そのような設定やあるいは同等な機能を果たすようにする方法? は存在しないのでしょうか?

関連するQ&A