1

私は同僚と協力して、XAMPP の MAC でローカル環境をセットアップしています。Windows では、私の vhost は以下のようになります。

http://domain.local/cgi-bin/handler.phpのような URL にアクセスすると、Web サーバーは PHP を正しく処理しますが、500 サーバー エラーとこのメッセージが表示されます...

The server encountered an internal error and was unable to complete your request.

Error message: 
Premature end of script headers:

httpd.confに別のエイリアスがあることに気付いたので、cgi-binフォルダーの名前を別の名前に変更しようとしましたが、これは効果がありませんでした...したがって、問題は権限に関連しているように思えます。

存在しないhttp://domain.local/cgi-bin/filenothere.phpにアクセスすると、予想どおり 404 がスローされ、.html/.pl ファイルの実行に失敗するため、エイリアスは正常に設定されていると考えられます。

cgi-bin フォルダに存在する権限は...

rwxrwxrwx デイブ スタッフ

ユーザーとグループによって所有されています....

デイブスタッフ

バーチャルホスト

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName  www.domain.local
    ServerAlias domain.local
ServerAlias api.domain.local

    # Indexes + Directory Root.
    DirectoryIndex index.php
    DocumentRoot E:/home/www/www.domain.co.uk/htdocs/

    # CGI Directory
    ScriptAlias /cgi-bin/ E:/home/www/www.domain.co.uk/cgi-bin/
    <Location /cgi-bin>
            Options +ExecCGI
    </Location>

    # Logfiles
    ErrorLog  E:/home/www/www.domain.co.uk/logs/error.log
    CustomLog E:/home/www/www.domain.co.uk/logs/access.log combined
</VirtualHost>

この PHP ファイルが実行されない原因は何ですか?

UPDATE コンテンツがPHPであることを示すヘッダーをPHPファイルの先頭に追加しようとしましたが、これは単にPHPコードを出力するだけです。

エイリアスとして指定された任意のパスにアクセスできますが、サーバーはコンテンツの実行方法を認識していないようです。これは、HTML と PHP の場合です。

4

5 に答える 5

3

cgi-bin のセクションが必要だと思います。

サーバーがスクリプト ソースを表示できるということは、サーバーが少なくとも /file/system/path/to/cgi-bin と ScriptAlias b/c ScriptAlias Expects /file/system/path/ と衝突する IIRC に対する読み取り権限を持っていることを意味します。 to/cgi-bin はセキュリティ上の理由からアクセスできません。あなたのソリューションは、次のようなものになるはずです。

<Directory /file/system/path/to/cgi-bin>
    Options ExecCGI
    SetHandler cgi-script
</Directory
于 2012-05-07T11:57:14.010 に答える
2

PHP スクリプトを Apache 用の PHP モジュールで直接実行できるため、PHP スクリプトを CGI として実行する必要は (非常に) まれです。これを Apache 設定に追加してみてください:

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

その後、PHP スクリプトをサイトのドキュメント ルートに配置し、動作するかどうかを確認します。URL の /cgi-bin/ 部分を削除する必要があります。

Mac で XAMMP を設定していると言いますが、パスの前にドライブ文字 (E:) が付けられています。OS X には Windows のようなドライブ文字がなく、これが問題 (の一部) を引き起こしている可能性もあります。

于 2012-05-08T06:53:20.490 に答える
0

PHPがセーフモードで実行されていると仮定するとcgi-bin、ユーザー(PHP)スクリプトの実行はDocumentRootとそのサブフォルダーに制限されているため、ディレクトリを「開く」必要がある場合があります。

私はあなたが2つの方法でそれを行うことができることを知っています

1.を編集しますphp.ini

を含む行を見つけますopen_basedir。行の先頭にコメント(セミコロン)がある場合は、それを削除します。次に、ディレクトリを追加しますcgi-bin

open_basedir = "E:\home\www\www.domain.co.uk\cgi-bin\"

複数のディレクトリを開く必要がある場合は;、区切り文字としてセミコロンを使用できます。Linuxベースのサーバーでは、コロンを使用します:

open_basedir = "E:\home\www\www.domain.co.uk\cgi-bin\;E:\home\www\www.domain.co.uk\another_dir\"

私のようにサーバーがサードパーティによってホストされている場合は、2番目のオプションが必要になります(まあまあ)

2.VirtualHostを編集します

以下をVirtualHostに追加します。つまり、次の後に追加しますDocumentRoot

php_admin_value open_basedir "E:\home\www\www.domain.co.uk\cgi-bin\"

ここでは、複数のディレクトリと、上記のLinuxシステムとWindowsシステムの違いに同じルールが適用されます。

お役に立てば幸い

于 2012-05-08T13:02:33.380 に答える
0

使用される設定についてはあまり知りません。しかし、次のリンクをたどるべきだと思います。助けが得られるかもしれません。

  1. http://www.sean-barton.co.uk/2009/02/setting-up-a-phpmysql-local-development-environment-on-a-mac-doing-it-properly/
  2. http://docs.joomlabamboo.com/using-joomla/setting-up-a-quick-start-package-on-your-local-server-xampp-pc
  3. http://www.adobe.com/devnet/dreamweaver/articles/setup_php.html
  4. レガシーPHPアプリ用のMac OS X開発環境を作成するには?
于 2012-05-07T10:13:56.583 に答える
0

PHP が CGI プログラムとして実行されているのか、それとも Web サーバー モジュールとして実行されているのか知っていますか? phpinfo() ページを動作させることができれば (おそらく Web サイトのルート内の通常のフォルダーから)、これを見つけることができるはずです。Web サーバーモジュールとして実行している場合は、最上部近くに、(または同等の)Server APIという見出しのセクションが必要です。Apache 2.0 Handler

これらのページから:

... PHP が CGI スクリプトとして実行されているか、PHP と別の CGI ハンドラとの競合が原因のようです。

リンクされた 3 番目のページのポスターの 1 つは、.htconfig / vhosts ファイルend of script headersの行を削除またはコメントアウトすることで、同様の問題が解決されたことを発見しました。Options +ExecCGI

上記のリンクを読んで、問題が関連しているかどうかを確認する価値があるかもしれません.

于 2012-05-08T16:42:57.237 に答える