2011-01-22 13 views
1

、私はhook_cronの基本的な実装がありますDrupal 6:hook_cronで、モジュールファイルへのパスを指定する方法は?私.moduleファイルで

function foobar_cron() 
{ 
    $file = fopen('my_file', 'a'); 
    // stuff 
    fclose($file); 
} 

を問題は、この方法は、(http://www.example.com/)cron.phpによって呼び出されるということですので、パスmy_fileが正しくありません。 foobarモジュールディレクトリにあるmy_fileの正しいパスを指定する方法を教えてください。

答えて

3
<?php 
    // something like the following. Might need to tweak the pathing. 
    $path = drupal_get_path('module', $module_name) . '/my_file'; // $module_name = foobar in your case 
?> 
+0

これは、htdocsディレクトリに関連するパスのみを提供します。 – caxpeyr

+0

umm、あなたのサーバがどのように設定されているかによっては、htdocsに比べて、_/sites/all/modules/foobar/myfile_ so yesのような文字列パスを返す必要があります。だからあなたはそれを修正して、手動で_ $ path = '/ var/wwww/htdocs'のようにすることができます。 drupal_get_path( 'module'、 'foobar')。 '/ my_file'; $ファイル= fopen($パス、 'a');それは動作するはずですか? –

+0

それはそうですが、それはまさにあなたが望むものです。なぜなら、すべての要求がindex.php、cron.phpまたはupdate.phpを通過するので、Drupalの現在のディレクトリは常に最上位ディレクトリです。したがって、$ pathを直接使用するのは安全です。 Drupal自体も同じことをしています。 – Berdir

0

I)は、(あなたがhook_cron実装するときに、あなたのモジュールのディレクトリ内のファイルにアクセスするには、次のコードを使用することができることを発見した:

function foobar_cron() 
{ 
     $file = fopen(realpath(".") . PATH_SEPARATOR . drupal_get_path('module', 'foobar') . PATH_SEPARATOR . 'myfile.txt', 'a'); 
} 

PATH_SEPARATORは、パスは、Windows上で動作を確認します。

+0

PATH_SEPARATORは、 ":"または ";"ではなく* * /です。 DIRECTORY_SEPARATORを意味しています。また、/を使用することはWindowsを含めて常に機能するため、/を使用することは非常に安全です。 – Berdir

関連する問題