FastCGI php komut dosyalarını çalıştırmak için kullanılır olup olmadığını kesin bilmek nasıl

7 Cevap php

Ben bir site barındırılan var ve sorun (IIS7 + sunucu 2008 kazanmak çalışan Joomla + php + MySQL) Joomla yapılandırma yaşıyorum. Ben bir yerel makinede (IIS7 + vista x64 Joomla + php + MySQL) üzerinde çalışan benzer bir konfigürasyona sahip, bu yüzden bu kadar ayarlamak için nasıl çeşitli öğreticiler gösterdi talimatları takip azından başardı.

Barındırılan site ile bu belirti ben Joomla (hatta ilk ayarı, "Arama Motoru Dostu URL'ler") herhangi bir SEO ayarları açmak değil ki. Ben 404 (dosya bulunamadı) ya almak ya da URL doğru yazılabilir görünür ancak görüntülenen her zaman ev sayfanın içeriği bulunuyor. Benim ev makinede benzer bir sorunu vardı ve ben php barındırmak için FastCGI kullanarak değildi çünkü olmuştur çıkıyor, bu yüzden ev sahipliği sitede bu araştırmaya karar verdi.

Her neyse, ben site barındırılan Aşağıdaki satırı üzerinde Joomla hosting dizinin web.config dosyasında fark ettim:

<add name="Plesk_Handler_3522909676" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php5isapi.dll" resourceType="Either" />

Geçmiş deneyimlerinden, ben FASTCGI altında çalışmıyorsa ne zaman php bazı sorunları olduğunu biliyoruz. Ben kök klasöründe web.config yerine aşağıdaki satırı kullanılan fark ettim:

<add name="Plesk_Handler_0286090609" path="*.php" verb="*" modules="CgiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php-cgi.exe" resourceType="Either" />

Ben joomla dizinde web.config kopyalanacak ve farklı bir davranış var ... ama hala çalışmıyor. I phpinfo () çalışır joomla dizininde bir. Php dosyası yüklerseniz, Server API altında CGI / FastCGI diyor. positive confirmation o FastCGI kullanıldığını mi? Neden bunun yerine modül = "FastCgiModule" (Ben var bile emin değilim, ama sadece şüpheli CgiModule bir söz bulmak) modülleri = "CgiModule" için web yapılandırma noktasında işleyicisi yapar.

Bu bir barındırılan site, bu yüzden bildiğim kadarıyla ben ApplicationHost.config dosyasına erişimi yok ...

7 Cevap

Burada basit bir test:

  1. Bir phpinfo.php dosyası ile oluşturun

 <?php phpinfo(); ?> 

içeride;

  1. İstek http://yoursite.com/phpinfo.php/foobar?foo=bar

  2. Phpinfo kontrol ve _SERVER ["REQUEST_URI"] arayın.

Bu değişkeni eksik ise, CGI kullanılır. Değişken mevcut ve doğru ayarlanmış ise / phpinfo.php / filanca? Foo = bar, sonra ISAPI veya FastCGI kullanılır ya. Server API çıkışının üstüne yakın bakın; Bu ISAPI (ISAPI kullanılmakta olduğu anlamına gelir) ya da CGI / FastCGI (biz zaten CGI dışladı beri FastCGI, kullanılmakta olan anlamına gelir) ya da ayarlanmalıdır.

Emin olun işler Fastcgi çalışmadığı zaman script tamamen başarısız nerede başlangıçta ayarlanmıştır. Sonra ne zaman çalıştığını, o cini Fastcgi nedeni, bileceksiniz.

Ne yazık ki, kontrol \_SERVER["REQUEST_URI"] benim için işe yaramadı. CGI veya FastCGI kullanarak, her zaman görüntülenir /phpinfo.php/foobar?foo=bar.

Sadece php destekleri değil, ne kullanılan derlenmiş sürümünü arabirimleri ne söyler - Server API = CGI/FastCGI kurulmuştur görünce ne yaptı. Ancak, daha güvenilir çalışabilir başka bir yöntem bulundu.

Plonk phpinfo.php ihtiva eden adı verilen yerde bir dosyanın metin: <? php phpinfo(); ?>

Check for the variable \_ENV["REDIRECT_HANDLER"]:
If it is set to php5-fastcgi (or something else fastcgi-ish) the request most probably went through FastCGI. If it is set to application/x-httpd-php (or I assume something other than the above), you are using CGI.

However, a surefire way is by running a little test. You need the ab (Apache Bench) tool for this.
Both with and without CGI, run this from another machine:

ab -c 100 -n 1000 http://yourdomain.com/path/phpinfo.php

Hattını kontrol Time taken for tests:. Benim makinam, en azından bir 1.3Mbps ADSL bağlantısı üzerinden benim VPS erişim CGI ile sadece yarısını doldurmak mümkün iken, FastCGI tamamen dışarı maxed.

Umarım bu yardımcı olur.

Sen (CentOS üzerine) apachectl-M kullanabilir, hangi modüllerin etkin ne göstereceğim:

apachectl-M:

file_cache_module (shared) mem_cache_module (shared) version_module (shared) fastcgi_module (shared)

Joomla arama motoru dostu URL'ler sağlamak için ona yeniden yazma kuralları ile bir. Htaccess dosyası oluşturur. Apache kullanıyorsanız size joomla kurulumunu içeren dizin için "AllowOverride FileInfo" ayarlamak zorunda gerekir. IIS kullanıyorsanız, böyle IISModRewrite gibi bir modül gerekir. İşte bunun için talimatları vardır: [http://www.micronovae.com/ModRewrite/articles/SEFJoomla.html]

Sen ona başvurulan görmek gerekir

<?php
phpinfo();
?>

Server API = CGI / FastCGI

Bu benim için çalıştı.

/**
 * return phpinfo() results as an array
 *
 * @credit http://php.net/manual/en/function.phpinfo.php#106862
 * @param void
 * @return array
 */
function phpinfo_array(){
    ob_start();
    phpinfo();
    $info_arr = array();
    $info_lines = explode("\n", strip_tags(ob_get_clean(), '<tr><td><h2>'));
    $cat = 'general';
    foreach($info_lines as $line){
        preg_match('/<h2>(.*)<\/h2>/', $line, $title) ? $cat = preg_replace('/\s+/', '_', strtolower(trim($title[1]))) : null;
        if(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = $val[2];
        } elseif(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = array('local' => $val[2], 'master' => $val[3]);
        }
    }
    return $info_arr;
}


// output proper response code
$phpinfo = phpinfo_array();
$configure = (@isset($phpinfo['general']['configure_command'])) ?: null;

// properly account for FastCGI
if ($configure && preg_match('/--enable-fastcgi/', $configure)){
    // fastcgi response
    header('Status: 403 Access is forbidden');
} else {
    // http response
    header('HTTP/1.0 403 Access is forbidden');
}