クライアント起動webサイトphpプログラム内で、「/public_html」直下に配置したディレクトリ「img-tempr」内に一時的に作成した作業用ディレクトリとファイルの利用終了時、親プログラムへの戻るボタンクリック時に作成した作業用ディレクトリとファイルをglob関数の利用により削除処理を行なっています。
但し、親プログラムへの戻るボタンをクリックせず、ブラウザ右上の「X」などで予期せぬ終了をされた場合、一時的に作成した作業用ディレクトリとファイルの削除処理が行なわれずに残ったままとなっていました。
これを回避する手段として、「img-tempr」のパーミッションは「777」に設定、3つのサブディレクトリと各サブディレクトリには1つのファイルをテスト配置し、以下の対応を行ないました。
phpバッチプログラムを作成、Cron設定追加(還じい様に助けて頂きました。)で深夜帯での時刻起動を想定し、「/public_html/img-tempr」直下内に作成されたまま残存した一時的ディレクトリとファイルの削除処理を、「php 指定ディレクトリ配下削除」で検索し作成しました。
Cron設定追加で実行させましたが、ログファイルのみ作成されたまま何も記録されませんでした。そこで、下記プログラム「img-temprl.php」を作成しました。
<?php
$files = glob("img-tempr/*");
var_dump($files);
foreach ($files as $file) {
echo $file . “\n”;
}
$files = glob("/img-tempr/*");
var_dump($files);
foreach ($files as $file) {
echo $file . “\n”;
}
?>
Cron設定追加実行後ログファイルは4行のみの下記「logfile.log」です。
array(0) {
}
array(0) {
}
そもそもこの対応には無理が有るのか、何処をどうしたら期待される結果が得られるのか、お手上げ状態です。
何卒、宜しくお願いします。
【ご注意ください!】私が悪意を持って嘘の内容を教えている可能性、私の知識が誤っている可能性、記載ミスをしている可能性なども否定はできず、安易に実行すると致命的な状況が発生するかもしれません。記載されている内容の意味を必ずご自身で調べたうえで、自己責任で利用してください。
・そのPHPプログラムをCronで実行している
・実際にディレクトリ、ファイルを削除するCron(PHPプログラム)においても、同じようなパスの指定の仕方をしている
ということであれば
前者・・・カレントディレクトリが、「Cron設定追加のコマンドについて」さんが考えているディレクトリとは異なるものになっている
後者・・・フルパスの指定が誤っている
といった理由で、「img-tempr/」内にファイル、ディレクトリが存在しても、何も出力されない(対象のディレクトリ、ファイルがあっても削除されない)可能性が高そうです。
前者については、Cronでコマンドを実行する場合、カレントディレクトリはうろ覚えですが
/home/サーバーID/
だったはずで、少なくともそのPHPプログラムがあるディレクトリが自動的にカレントディレクトリになるわけではありません。
そのプログラムがあるディレクトリを起点に、相対パスで「img-tempr」ディレクトリを指定したいのであれば、事前にカレントディレクトリをそのように指定しておく必要があります。
もしくは、そのPHPプログラムをwgetでURLを指定して実行すると、やっていることは「Webアクセス」になるので、カレントディレクトリが「実行したプログラムがあるディレクトリ」となり、期待した結果が得られると思います。
※この方法はPHPプログラムが「Webアクセスできるディレクトリ」に設置されている必要がありますが、質問を見る限りではそのようなディレクトリに設置しているようなので、参考までに記載しました。
後者の記載はフルパスなので「/img-tempr/」とだけ指定している場合、
/home/サーバーID/ドメイン名/public_html/img-tempr/ ではなく、
/img-tempr/ に対して処理しようとします。
そのようなディレクトリはないか、あってもファイルやサブディレクトリはなさそうなので、結果が何も返ってこないのは当然だと思われます。
$files = glob("/home/サーバーID/ドメイン名/public_html/img-tempr/*");
などとすれば、期待する結果になるかもしれません。
サーバーIDにはご自身のサーバーIDを、ドメイン名には削除したいディレクトリがあるドメイン名を指定してください。
なお、特定のディレクトリを定期的に消したいだけであれば、PHPプログラムを設置して実行せずとも、
rm -rf /home/サーバーID/ドメイン名/public_html/img-tempr/*
のようなコマンドで実現できるのでは、とも思います。
ディレクトリの指定が誤っている場合も問答無用で削除されてしまうので、
ls -al /home/サーバーID/ドメイン名/public_html/img-tempr/ >filelist.txt
などで事前に「適切なディレクトリが指定できているか」をチェックするとよいかもしれません。この書き方であれば、出力結果は /home/サーバーID/filelist.txt に生成されます。
また、このような「プログラムの実際の書き方に関する質問」となってくると、エックスサーバーだからどう、といった話はあまり関係なくなってくるので、ここのコミュニティでこれ以上質問しても適切な回答は得られないかもしれません。じゃあどこに質問すればいいんだっていうと、私もよくわかっていませんが…。