プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

たとえばこんな感じ?



<?php
$path=realpath(dirname( __FILE__));
$filename="../data/dat.txt";
$filename=$path."/".$filename;
$fp=fopen($filename,"w");
fputs($fp,$data);
fclose($fp);
?>
    • good
    • 0
この回答へのお礼

はじめての質問の書き込みでしたので、返事がくるか不安でした。
お返事を頂きありがとうございます。

上のソースでうまくいきました。
ありがとうございます。^^

また、このようなコードを打たないで
なんというか、自動的にphpを実行する際にカレントディレクトリを帰られるものがないのかなぁとおもっています。

えと、つまり、phpに記述しなくても、
PCのほうでphpを実行する際に、カレントディレクトリを自動で
プログラムの存在する位置に移動させる設定(cron側での設定?)みたいなものがあるんじゃないだろうかと思っています。
ご存知でしたら、ご教示いただきたいです。
よろしくお願いいたします。

お礼日時:2007/06/06 03:11

>プログラムを実行する際に


だからシェル側でやったら?
有るんだし


/usr/bin/php /var/​www/html/filename.php​

↓ (飽くまでも参考ね)

cd /var/www/html
/usr/bin/php ./filename.php
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/22 15:22

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

    • good
    • 0
この回答へのお礼

お返事ありがとうございます。^^

初心者なので、見当違いなことをいっているのかもしれませんが、
cdで一回一回移動させるのは大変なきがしまして;;
プログラムを実行する際に、作業(実行)場所に自動で移動するような(cron側とかOSサイド)設定はないのでしょうか?

それっぽいキーワードで
WEBで検索をかけてみたのですが、みつからなくて、
そのような設定やあるいは同等な機能を果たすようにする方法?
は存在しないのでしょうか?

お礼日時:2007/06/06 03:17

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