PHP komut dosyası boş değişken bir HTTP 500 hata atmak IIS7 olur

2 Cevap php

Benim makinede yerel IIS7 ve PHP5 çalıştırıyorum ve yukarıda kod IIS bir HTTP 500 hata atmak neden olur. Hayal kırıklığı ve şaşkınlık bir sürü sonra ben boş değişken ile herhangi bir PHP komut dosyası bu IIS hata atmak olacağını anladım. Aşağıda, bu bir örnektir:

<?php $x = $y; ?>

Ben bu davranışı çok garip buluyorum ve ben yazmak kod büyük bir yüzdesini kırar. Çoğu durumda düzgün ayıklama önlüyor. Ben gerçekten çıktı ve hata iletileri görmek istiyorum. Ayrıca, bu süper globalsin kullanımını GET ve POST kırabilir ve sadece kendi yürütülmesine engel mantık tarafından bastırılmış olabilir.

2 Cevap

Ben fascgi modülünü kullanarak IIS7 + PHP kurulum kullanmak ve bu sorunu alamadım. PHP düzgün hataları verir. Ben PHP ve IIS bu kılavuza göre düzgün bir şekilde kurulmuş olduğunu doğrulamak olacaktır:

http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/

En yaygın tuzak php-cgi.exe çağrı vs php-win.exe veya php.exe aramak için IIS atanmış olmasıdır. Ayrıca, php.ini bazı ayarları bu soruna neden olabilir. Ben hangi ancak hatırlamıyorum.

PHP stdout bir istisnası, baskı atma, ve büyük olasılıkla düzgün hata raporlama. IIS muhtemelen görmezden ve 500 atıyor.

Yerine IIS yatıştırmak olabilir ki, bunları gösteremeyecek dosya için hataları oturum açmayı deneyin. Ben inanıyorum:

display_errors = Off
log_errors = On
error_log = "C:/YourWWW/errors.txt"

... Ama kontrol için kullanışlı bir php.ini yok.

Konuya geri, $y boş ise, PHP yapmak için ne bekliyorsunuz? Eğer varolmayan bir değişkeni atamak çalıştığınızda aklı başında herhangi bir programlama dili kusmuk olacaktır. Bu sert gelebilir ama bu "yazdığınız kod çoğunluğu tatili" ise, yanlış bir şey yapıyoruz. Ayrıca, $_GET ve $_POST "kullanımını kırmak" ile ne demek emin değil. Eğer demek istediğin bu bir 500 atacağım:

$foo = $_GET["nonexistentvar"];

... O zaman olacak çok haklısın. Siz var olmayan bir şey atamak PHP beklemeden önce anahtarın varlığını kontrol edilmelidir. Pow, no: 500

$foo = isset($_GET["nonexistentvar"]) ? $_GET["nonexistentvar"] : NULL;

Üzgünüm düşmanca ses, ancak söz gerçekten ağlamaklı geldi eğer.