10

Ubuntuで正常に動作するPHPページを継承しましたが、PHP5.4を使用するXAMMPまたはPHP5.3を使用するWAMPのいずれかを実行しているWindows7システムのディスプレイにソースコードをダンプします。

ダンプが発生するのは、「->」(オブジェクトプロパティ)文字の組み合わせを解析しようとしたときのようです。配列要素としてアクセスするためにこれを「[]」に変更すると、それを通過しますが、「=>」(マッピング)文字の組み合わせの後に表示されるディスプレイにソースコードをダンプします。outは機能しないとコメントし、行全体を削除するだけでそれを通過できます。

最後に、「<」と「>」の記号が付いたhtmlを出力するだけの場合は、画面のダンプも発生します。これらの文字をhtmlエンティティに置き換えると、ソースコードはダンプされなくなりますが、プログラムはメニューを表示せず、まったく機能しません。ユーザー名フィールドに「POST」やその他の「<」および「>」の文字が表示されていても、ログインページからアプリに正常にログインできることに注意してください。

アプリ全体でunix2dosを実行してみましたが、効果がありませんでした。また、問題のあるページの1つのテキストをUTF-8に変換しようとしましたが、それでもうまくいきませんでした。

提起された質問のいくつかに答えて:

動作するubuntuバージョンはPHPバージョン5.3.10-1ubuntu3.1です

WindowsではなくUbuntuで機能する最初のコードは次のとおりです。

public function __construct($gid)
{
    $this->id = $gid;
    return $this->retrieve();
}

ディスプレイへのコードダンプは次のように始まります。

id = $gid; return $this->retrieve(); }

はい、PHPInfoは機能し、PHPバージョン5.3.13のWAMPサーバーで表示されます

ショートオープンタグを変更してみましたが、違いはありませんでした。

この製品はアウトソーシンググループによって作成されたものであり、ある種のフレームワークに基づいているようです。しかし、Googleでクラス名への参照を見つけることができなかったので、おそらく彼らはすべてを社内で書いたのでしょう。

apacheログに移動すると、実際のエラーは次の行で発生します。

$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']);

エラーメッセージは次のとおりです。

メンバーシップが見つかりません

メンバーシップは、上記の時点でディスプレイにダンプされるクラスと同じファイルで後で宣言されるクラスであるため、何らかの理由で、PHPパーサーはその時点からPHPコードを読み取っていることを理解しません。

4

4 に答える 4

2
I tried changing the short-open-tag but it made no difference.

このようなシナリオでは、小さなスクリプトを作成して実行し、それが機能するかどうかを確認することができます。短いタグと以下の方法を試してください。混乱した場合php.iniは、サーバーを再起動する必要があることに注意してください。タスクバーのサーバーアイコンを右クリックして設定を変更することをお勧めします。phpの短いタグが原因である可能性があります。スクリプトを有効または無効にして実行してみてください。また、以下のスクリプトを変更して、変更した設定にどのように影響するかを確認してください。

EG:

<?php
echo "hi";
// phpinfo(); <-- preferred if you can
?>

次に、サーバーが意図したとおりに機能しているかどうかを確認できます。O / Phiの場合は、大きなコードを試してみてください。

ちなみにあなたが提供したコードにはエラーがないようです。

于 2013-01-26T10:36:36.613 に答える
0

PHP は、クラスの命名で大文字と小文字を区別しません。普通にできる

$membership = new membership();

クラスの名前が「メンバーシップ」であっても、その逆も同様です。クラス名を変更してみてください。オペレーティング システムでクラス ファイル名の大文字と小文字が区別される可能性があります。

于 2013-01-29T08:05:10.677 に答える
0

うーん、面白いです。

これが大きなアプリケーションの場合は、含まれているすべてのファイルを確認する必要がある場合があります。問題の数が存在する可能性があります。

次の手順を実行してみてください

  1. 設定error_reporting(E_ALL);
  2. http://php.net/manual/en/function.debug-backtrace.phpを使用してみてくださいdebug_backtrace
  3. 出力バッファリングのステータスを確認します。オンかオフか

一方、プロジェクト全体を Linux から Windows にコピーしましたか? 一部のファイルは、Windows には存在しないプロジェクト フォルダーの外にある可能性がありますか? 「サポート」のために連絡できるように、多くの人がそのような抜け穴を作っていることを私は知っています:)

于 2013-01-28T06:07:27.583 に答える
0

それは本当に奇妙です..メンバーシップクラスがロードされているか、関数を使用していないことを確認できますが:

array get_declared_classes ( void )


<?php
print_r(get_declared_classes());
?>

定義されたクラスの名前を持つ配列を返します。

参照: http://php.net/manual/en/function.get-declared-classes.php

于 2013-01-31T12:37:45.770 に答える