

modxを使い始めてまだ間もないのですが、どうしても行き詰まってしまっているのでご質問させて下さい。

現在MAMP上で作業を進めていて、外部PHPスクリプトからmodxオブジェクトを生成してコンテンツのデータベースの値（具体的にはテンプレート変数）を書き換えるという処理を行おうとしています。

以下に従っています。

<http://modx.jp/docs/dev/basic.html>

また、プログラムの処理自体は一度プラグインとして実装し、期待通りのDB内のデータを書き換えれることを確認しています。現在はPVをカウントする機能を作っているので、PVを定期的に0にリセットする処理を行いたいと思い、cronの利用を考えています。cronからだとプログラムをスクリプトとして用意しておく必要があると思い、現在プラグインで実装したものを通常のPHPスクリプトに書き換えようとしています。

PHPスクリプトは以下です。

[code]

    <?php
    
    // modxオブジェクト生成
    define('MODX_API_MODE', true);
    $path = dirname(__FILE__).'/';
    include($path.'index.php');
    $modx = new DocumentParser;
    $modx->db->connect();
    $modx->getSettings();
    
    $tmplvars_name = 'pvc.day';
    
    /*
     * 日のリアルタイムPVを0にリセット
     */
    // ページビューを計測しているか確認
    $pv = $modx->getTemplateVarOutput(array('pvc.day'));
    if ($pv !== false) {
        $res = $modx->dbQuery("SELECT id FROM modx_site_tmplvars WHERE name = '".$tmplvars_name."'");
        $arr = $modx->fetchRow($res);
        $modx->dbQuery("UPDATE modx_site_tmplvar_contentvalues SET value = 0 WHERE tmplvarid = ".$arr["id"]);
    }
    
[/code]

ここで、

$ /Applications/MAMP/bin/php/php5.6.7/bin/php ./reset_pv_day.php

のようにスクリプトをを実行すると以下のようなエラーが出ます。

> Notice: Undefined index: PATH_INFO in
> /Applications/MAMP/htdocs/manager/includes/initialize.inc.php on line 170  
>  Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in
> /Applications/MAMP/htdocs/manager/includes/extenders/sub.document.parser.class.inc.php
> on line 154  
>  Error

また以下のようにしてmodx libraryを使った方法も試してみたのですが、

[code]

    // modx apiの読み込み
    $path = dirname(__FILE__).'/';
    include_once($path.'modxapi.php');
    // modxオブジェクトの生成
    $modx = new MODxAPI();
    
[/code]

以下のようなエラーが出てしまいます。

> Notice: Undefined index: PATH_INFO in
> /Applications/MAMP/htdocs/manager/includes/initialize.inc.php on line 170  
>  Notice: Undefined index: REQUEST_URI in
> /Applications/MAMP/htdocs/manager/includes/initialize.inc.php on line 130  
>  Notice: Undefined index: SERVER_PORT in
> /Applications/MAMP/htdocs/manager/includes/initialize.inc.php on line 158  
>  Notice: Undefined index: HTTP_HOST in
> /Applications/MAMP/htdocs/manager/includes/initialize.inc.php on line 137

MAMP特有の問題かなと思い本番環境でも一応試してみたのですがErrorとなりうまく動作しません。

ご回答いただけますと非常に助かります、よろしくお願い致します...！

現在の環境は以下のようになっています．

  * サーバ：MAMP
  * MODXのバージョン：1.0.14J-r9
  * PHPのバージョン：5.6.7
  * MySQLのバージョン：5.5.42
  * ブラウザ：Chrome


CC BY-SA 3.0
2015-06-10T06:00:22.837
11207
2016-09-30T01:42:07.187
2015-06-10T06:09:14.477
3639
10084
question
php
外部PHPスクリプトからmodxのAPIを利用してコンテンツのデータベースの値を書き換える方法について


modxのAPIを使うことは諦め，PHPスクリプトから直接DBにアクセスする方法でテンプレート変数の値を書き換えることでひとまず解決しました．

ありがとうございました．

SQLベタ書きであれですが，以下の感じのスクリプトで更新処理を行うようにしました．一応掲載させていただきます．

[code]

    <?php
    
    /*
     * 日のリアルタイムPVを0にリセット
     */
    
    require_once 'config.php';
    
    try {
      $dbh = new PDO('mysql:host=localhost;dbname=database', $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    } catch  (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
    }
    
    $tmplvars_name = 'pvc.day';
    
    $select_sql = "SELECT id FROM modx_site_tmplvars WHERE name='".$tmplvars_name."'";
    $stmt = $dbh->query($select_sql);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    echo $result["id"];
    
    $update_sql = "UPDATE modx_site_tmplvar_contentvalues SET value=0 WHERE tmplvarid=".$result["id"];
    echo $update_sql;
    echo "\n";
    if($dbh->query($update_sql)) {
      echo "Success!";
    }else {
      echo "Failed...";
    }
    
[/code]


CC BY-SA 3.0
2015-06-10T08:33:47.750
11215
2015-06-10T08:33:47.750
10084
11207
answer