3

したがって、次のjQueryブロックがあります。

var file = "something.html";
$.post("/load", {which: file}, function(data){
  // do stuff
});

ファイルをロードするバックエンドを呼び出すことになっています。loadコントローラー (私は CodeIgniter 2.1.3 を使用しています) は次のようになります。

class Load extends MY_Controller {
    public function index()
    {
        $file = $this->input->post("which");
        $content = get_file_contents($file);
        echo $content;
    }
}

ただし、何らかの理由で、$file変数は空のままです。

ここで、 を に変更し、ブラウザーからページにアクセスして (例: ) 、loadコントローラーが実際に動作することをテストしました。正しいファイルがロードされ、エコーされます。$this->input->post()$this->input->get()/load?which=something.html

CodeIgniter ハンドラの代わりにプレーン$_POST変数を使用してコードをデバッグしました。$_POST["which"]未定義のインデックス エラーとして表示されます。

他のスレッドからの提案に従って、私も試しvar_dump()てみました$_POSTfile_get_contents('php://input')、両方とも空として表示されます。すべての意図と目的のために、バックエンドは POST データを受信して​​いません。

インスペクタのネットワーク セクションから、AJAX 呼び出しが実際に送信され、「フォーム データ」セクションに必要な情報が含まwhich: something.htmlれていることがわかります。リクエストは 404 Not Found ステータス コードで返されます。echo "test"; exit;ただし、 AJAXリクエストに対してすべてが実際に「テスト」を返す前に、適切なコントローラーが実際にコントローラーに追加されていることを知っています。

オンラインで解決策の候補を見つけた限り、私の php.ini は適切であるはずです。私はそれがvariables_order含まれPていpost_max_sizeて、妥当なサイズであることを確認しました. 一部の回答者が .htaccess リダイレクトの可能性を示唆していたので、JS が要求する URL の末尾にスラッシュを追加しようとしましたが、すべて役に立ちませんでした。

参照用の .htaccess は次のとおりです。

# Customized error messages.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>

この同じコードは過去に機能していましたが、今は Apache (2.2.22) と PHP (5.3.13) を新しくインストールした新しいコンピューターを使用しています。 Apache または PHP の構成の問題。このスレッドがスタック オーバーフローよりもサーバー フォールトに適しているかどうかはわかりませんが、私はプログラマーでありシステム管理者ではないので、ここに誰か考えがあるかどうかを確認したいと思いました。ありがとう!

4

1 に答える 1

0

Jan Dvorak の鋭い提案に基づいて、現在の環境の構成とコードが最後に機能した環境の構成を比較し、有効な Apache モジュールと PHP 拡張機能のリストが同一であることを確認しました。

このプロセス中に、既に使用していたものに加えて、次の Apache モジュールを有効にしました。

  • auth_digest_module
  • dav_lock_module
  • headers_module
  • info_module
  • プロキシモジュール
  • proxy_ajp_module
  • ssl_module
  • status_module

また、以前はオンになっていない次の PHP 拡張機能もオンにしました。

  • php_bz2
  • php_curl
  • php_exif
  • php_gettext
  • php_imap
  • php_openssl
  • php_pdo_odbc
  • php_pdo_sqlite
  • php_soap
  • php_sockets
  • php_sqlite
  • php_sqlite3
  • php_xmlrpc

私より賢い人なら、どのモジュール、拡張機能、またはそれらの組み合わせがこの問題の正確な解決策であるかを教えてくれます。

ただし、これらのモジュールと拡張機能を有効にすることで、環境が以前の環境と同様であることを確認できました。この場合、コードや.htaccess.

于 2013-03-01T08:21:37.633 に答える