見積りや請求書の保存の際のエラーについて

187 views
Skip to first unread message

明比貴宏

unread,
Apr 15, 2014, 11:23:56 AM4/15/14
to vtige...@googlegroups.com
見積りや請求書を作成したて保存ボタンを押すと下記のエラーが出ます。


Warning: Illegal offset type in C:保存先のディレクトリー\include\utils\CommonUtils.php on line 2922

Warning: Cannot modify header information - headers already sent by (output started at C:保存先のディレクトリー\include\utils\CommonUtils.php:2922) in C:保存先のディレクトリー\modules\Quotes\Save.php on line 62

このエラーの解決方法が分からず困っています。
どうすれば良いですか?

slzo

unread,
Apr 20, 2014, 10:35:22 AM4/20/14
to vtige...@googlegroups.com
php.ini の error_reporting 設定を厳しくしていると、警告が大量にでますが、そうではないですか?
警告が出るだけで、動作は正常なのですか?

明比貴宏

unread,
Apr 20, 2014, 10:54:26 AM4/20/14
to vtige...@googlegroups.com
警告が出るだけで、元のホーム戻れば何の問題も起きていません。

slzo

unread,
Apr 20, 2014, 8:12:59 PM4/20/14
to vtige...@googlegroups.com
こんな解決方法も、、、
http://devilab.net/2014/02/uncategorized-28090330.html


On Sunday, April 20, 2014 11:54:26 PM UTC+9, 明比貴宏 wrote:
警告が出るだけで、元のホーム戻れば何の問題も起きていません。

明比貴宏

unread,
Apr 20, 2014, 8:30:51 PM4/20/14
to vtige...@googlegroups.com
上の方のとうりOFFにしてみましたが、解決せずです。

slzo

unread,
Apr 24, 2014, 8:00:28 AM4/24/14
to vtige...@googlegroups.com
サーバー再起動しなくてOFFが有効になってないとかないですか。
PHP 警告 非表示、などでググると各種方法が見つかるので、通常は非表示にできるようですが、なぜでしょう。
そういえばvtigercrmのPHPコード内で警告表示関連を設定して箇所もありますが、その場合はコードをいじってやる必要があるかもです。

On Monday, April 21, 2014 9:30:51 AM UTC+9, 明比貴宏 wrote:
上の方のとうりOFFにしてみましたが、解決せずです。

Masanori Yamamoto

unread,
Apr 30, 2014, 1:52:59 AM4/30/14
to vtige...@googlegroups.com
山本と申します。先ほどグループに参加しました。

Warningになっているので本体を修正する必要があると思います。
vtigerCRMのバージョンを教えていただけますでしょうか?該当部分を見てみます。

明比貴宏

unread,
Apr 30, 2014, 2:03:58 AM4/30/14
to vtige...@googlegroups.com
山本様
ありがとう御座います。
今会社で困っていいまして、そう言って頂けるとありがたいです。

バージョンは、vtiger CRM 5.4.0です。

よろしくお願い致します。

Masanori Yamamoto

unread,
Apr 30, 2014, 2:18:30 AM4/30/14
to vtige...@googlegroups.com
山本です

https://github.com/vtigercrm-jp/vtigercrm-5.4.0-ja/blob/master/include/utils/CommonUtils.php#L2922-L2932
怪しいのは上記の部分ですね。
include/utils/CommonUtils.phpをテキストエディタで開いて、2922行目あたりの
if (count($groupIdList) > 0)
という行の直前に
exit('test');
という行を挿入して、同じ操作で「test」と表示されるかどうか確認して
いただけますでしょうか?
「test」と表示されたら、さっきのexit文を消して元に戻して、今度は
if (count($groupIdList) > 0)
の次の行に
exit('test');
を挿入して試してみてください。Warningが再現されたら、そこが問題点で
あることが特定できるので、修正方法を考えてみます。



2014年4月30日水曜日 15時03分58秒 UTC+9 明比貴宏:

明比貴宏

unread,
Apr 30, 2014, 2:43:20 AM4/30/14
to vtige...@googlegroups.com
山本様


if (count($groupIdList) > 0)
という行の直前に
exit('test');

ということで試してみたのですが下記のようなエラーが出てしまいました。

Parse error: syntax error, unexpected T_EXIT in C:\XAMPP\htdocs\Frevo\include\utils\CommonUtils.php on line 2942

Masanori Yamamoto

unread,
Apr 30, 2014, 2:51:55 AM4/30/14
to vtige...@googlegroups.com
環境によってはecho 'test';exit; と書かなければいけなかったかも?

line 2942 と表示されているようなので、想定したポイントよりも20行前です。

$ownerList = getOwnerNameList(array($id));
という記述があると思いますので、この行の直前に
echo $id;exit;
を挿入してみてください。
特にエラーが出なければ、元に戻して、行の直後にecho文を挿入してみてください。

明比貴宏

unread,
Apr 30, 2014, 3:00:10 AM4/30/14
to vtige...@googlegroups.com
山本様

Parse error: syntax error, unexpected T_IF in C:\XAMPP\htdocs\Frevo\include\utils\CommonUtils.php on line 2942

というエラーが出て一切きどうしなくなりました。

Masanori Yamamoto

unread,
Apr 30, 2014, 3:16:00 AM4/30/14
to vtige...@googlegroups.com
テキストエディタは何をお使いでしょうか?

http://okwave.jp/qa/q6512134.html
何かイレギュラーな文字コードが混入しているような気がします。


明比貴宏

unread,
Apr 30, 2014, 3:18:52 AM4/30/14
to vtige...@googlegroups.com
ワードパットを使っています。

もう、この際再度構築しなおした方がいいですか?

それとも、再度構築しなおしても意味はないですか?

情報は、私のアカウントぐらいしか入ってないので・・・・

明比貴宏

unread,
Apr 30, 2014, 3:33:08 AM4/30/14
to vtige...@googlegroups.com
山本様
何度もすいません

先程、CommonUtils.phpのデータをバックアップデータから入れ直し、仰っていたところにecho 'test';exit;を入れてみました。

直前及び後の行ともにtestがでました。

Masanori Yamamoto

unread,
Apr 30, 2014, 3:33:44 AM4/30/14
to vtige...@googlegroups.com
WordPadだと保存時のデフォルトがリッチテキスト形式なので
ゴミが混入しちゃいますね。テキスト形式で保存してください。
これくらいなら構築し直すほどでもないと思います。

https://www.google.co.jp/search?q=php+texteditor
それか、テキストエディタを利用するのがよいです。

明比貴宏

unread,
Apr 30, 2014, 3:36:11 AM4/30/14
to vtige...@googlegroups.com
山本様

先程も書きましたが、CommonUtils.phpのデータをバックアップデータから入れ直し、仰っていたところにecho 'test';exit;を入れてみました。

直前及び後の行ともにtestがでました。

あと、おすすめのテキストエディターがあれば教えて下さい。


Masanori Yamamoto

unread,
Apr 30, 2014, 3:44:06 AM4/30/14
to vtige...@googlegroups.com
直後でもtestが表示されましたか?うーん?
それでは、echo __LINE__;exit; を挿入してみてください。
これで正確な行を知ることができます。

http://sakura-editor.sourceforge.net/
私は使ってませんが上記のエディタはクセが少なくて使いやすいのではと思います。

明比貴宏

unread,
Apr 30, 2014, 3:50:59 AM4/30/14
to vtige...@googlegroups.com
山本様

まず、直前に入れてみましたら
2941
と出ました。

後の行にいれたら
2943
と出ました。

Masanori Yamamoto

unread,
Apr 30, 2014, 3:57:25 AM4/30/14
to vtige...@googlegroups.com
20行さかのぼったはずですが、変わってないですね。うーん?
少し不思議な気もしますが、今度は
if (stripos($realfilepath, $rootdirpath) !== 0) {
という行を探して、その直前に echo __LINE__;exit; を挿入してみてください。

Masanori Yamamoto

unread,
Apr 30, 2014, 4:01:14 AM4/30/14
to vtige...@googlegroups.com
Warning: Illegal offset type in C:保存先のディレクトリー\include\utils\CommonUtils.php on line 2922
もともとのエラーがこのようになってますので、2922行目に何が書かれてあるかを
特定できればと思います。
echo __LINE__;exit;
を挿入するポイントをずらしていって、2922が表示されたポイントが問題箇所という
ことになります。


明比貴宏

unread,
Apr 30, 2014, 4:07:48 AM4/30/14
to vtige...@googlegroups.com
山本様
 
echo __LINE__;exit;を入れましたら、2943と出ました。

そして、2922行には
return $ownerList[$id];
と書かれていました。

Masanori Yamamoto

unread,
Apr 30, 2014, 7:50:11 AM4/30/14
to vtige...@googlegroups.com
> そして、2922行には
> return $ownerList[$id];
> と書かれていました。

ですね。行数を20行ほど引き算したらそのあたりだったので。
なぜか私の手元にあるコードとは行が違うみたいですが、違っても問題はないと
思うので気にせず調べます。

return $ownerList[$id];
上記の行の直前に
echo '$id='.$id;print_r($id);exit;
こう追記してみてください。
(コードを見た感じ、ログにも参考情報が残ってるみたいですけど)

明比貴宏

unread,
Apr 30, 2014, 7:58:11 AM4/30/14
to vtige...@googlegroups.com
山本様

直前に入れてみましたら、
$id=11
と表示されました。

Masanori Yamamoto

unread,
Apr 30, 2014, 8:11:42 AM4/30/14
to vtige...@googlegroups.com
元に戻して、同じポイントに
print_r($ownerList);exit;
と書いてみてください。これで分かるかも?

明比貴宏

unread,
Apr 30, 2014, 8:15:54 AM4/30/14
to vtige...@googlegroups.com
山本様

やってみたところ
Array ( [1] => Administrator )
と表示されました。

明比貴宏

unread,
Apr 30, 2014, 8:23:30 AM4/30/14
to vtige...@googlegroups.com
山本様

ちなみのArray ( [1] => Administrator )のAdministratorは、現在編集を行おうとさわった見積書の担当者のユーザー名です。

Masanori Yamamoto

unread,
Apr 30, 2014, 9:22:38 AM4/30/14
to vtige...@googlegroups.com
なるほど。潜在的なバグですね。ちゃんと直すには3~4つの関数をたぐっていく必要が
あるのでちょっと難しいです。getOwnerNameList関数かgetEntityName関数か、その先か。

return $ownerList[$id];
という行を削除して、

if(isset($ownerList[$id]))    $rs = $ownerList[$id];
elseif(count($ownerList)==1)  $rs = array_shift($ownerList);
else                          $rs = $id;
return $rs;
上記の4行を代わりに挿入してみてください。
ちゃんと直るわけではないですが、少しはマシにする程度に動作を
改善した上で、今回のWarningを回避できるようになると思います。


Message has been deleted

明比貴宏

unread,
Apr 30, 2014, 9:52:14 AM4/30/14
to vtige...@googlegroups.com
山本様

挿入しましたが、同じエラーが出ます。

明比貴宏

unread,
Apr 30, 2014, 9:53:31 AM4/30/14
to vtige...@googlegroups.com
追加

もう、治す方法はないのでしょうか?

phpファイルを1から作り再度構築しなおすとか出来ませんか?

Masanori Yamamoto

unread,
May 1, 2014, 1:06:40 AM5/1/14
to vtige...@googlegroups.com
私が直接見れたら簡単に直せそうですが、伝言ゲーム的にうまくいかないですね、、
思ってた箇所と違うみたいです。
デバッグ用の関数を作ってみるなど、問題部分を特定する方法を何か考えてみます。

明比貴宏

unread,
May 1, 2014, 1:09:58 AM5/1/14
to vtige...@googlegroups.com
山本様

もし、直接見て頂けるのでしたら、お願いで出来ますでしょうか?

システムは全てリモート可能にしていますので。

Masanori Yamamoto

unread,
May 1, 2014, 1:36:53 AM5/1/14
to vtige...@googlegroups.com
いいですよ。解決したらこのトピックで報告という形にすればよさそうですね。
機密な情報などはメールでよろしくお願いします。

明比貴宏

unread,
May 1, 2014, 2:04:15 AM5/1/14
to vtige...@googlegroups.com
山本様

先程メールをお送り致しましたのでご確認ください。

Masanori Yamamoto

unread,
May 1, 2014, 6:51:02 AM5/1/14
to vtige...@googlegroups.com
以下、解決メモです。

function getOwnerName($id) {
    global $adb, $log;
    $log->debug("Entering getOwnerName(" . $id . ") method ...");
    $log->info("in getOwnerName " . $id);

    $ownerList = getOwnerNameList(array($id));
    return $ownerList[$id];
}

上記の関数の処理の最終行、$ownerList[$id]という配列。
この $id が配列のためエラーになってました。
配列のキーは数値か文字列じゃないとダメなので。
なのでとりあえず、

if(is_array($id)&&count($id)==1) $id = array_shift($id);

という処理を直前に挿入して解決しました。無理やりなコードですが、
他からどういう値が渡ってくる処理なのか分からなかったので、とりあえず
このようにしました。

とりあえず解決した後で気が付きましたが、

$log->debug("Entering getOwnerName(" . $id . ") method ...");
この時点でおかしいので、さらにこのgetOwnerName関数の呼び出し元を見ると

$modifiedby_id = $adb->query_result($result, 0, 'modifiedby');
$modifiedby = $app_strings['LBL_BY'] . getOwnerName($modifiedby_id);
こうなっていて、このへんから変ですね。処理としては変ではないけど、
$modifiedby_idっていう変数名なら配列ではなくint値や文字列を
渡す意図だと思うので。

$modifiedby = $app_strings['LBL_BY'] . getOwnerName($modifiedby_id[xxx]);
配列の要素名は忘れましたが、こう書くのがほんとの正解かなと思いました。
バグですね。

それとvtigerCRMのバージョンは5.4でしたが、vtigercrm.jpで配布しているものは
5.3と6.0ですね。私の手元の環境と行番号が違うのはそのへんが関係している
みたいです。今回はF-RevoCRMでした。5.3も同様のバグがあるかもしれません。

明比貴宏

unread,
May 1, 2014, 6:54:25 AM5/1/14
to vtige...@googlegroups.com
山本様

ありがとう御座いました。
Reply all
Reply to author
Forward
0 new messages