كيف أعرف بالتأكيد إذا FastCGI المستخدمة لتشغيل البرامج النصية php

StackOverflow https://stackoverflow.com/questions/609044

  •  03-07-2019
  •  | 
  •  

سؤال

لدي موقع مستضاف و أنا أواجه مشكلة في تكوين جملة (تشغيل جملة + php + mySQL على IIS7 + win server 2008).يجب تكوين مماثل يعمل على الجهاز المحلي (جملة + php + mySQL على IIS7 + vista x64) ، لذلك كان على الأقل قادرا على اتباع التعليمات أظهر في مختلف الدروس على كيفية وضع هذا الأمر.

هذه أحد أعراض المشاكل مع استضاف الموقع هو أنني لا يمكن أن تتحول في أي إعدادات SEO في جملة (لا حتى أول الإعداد ، "محرك بحث ودية عناوين المواقع").أحصل إما 404 (لم يتم العثور على الملف) أو URL يظهر بشكل صحيح كتابة لكنه دائما الصفحة الرئيسية المحتوى الذي يتم عرضه.لدي مشكلة مشابهة في بيتي آلة اتضح أن يكون لأنني لم أكن باستخدام FastCGI استضافة php, لذلك قررت أن التحقيق أن على استضافتها الموقع.

على أي حال, لقد لاحظت في شبكة الإنترنت.config في الدليل استضافة جملة على استضافة موقع السطر التالي:

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

من تجربة الماضي ، أعلم أن php لديه بعض القضايا عندما لا يعمل تحت fastCGI.لاحظت شبكة الإنترنت.config في المجلد الجذر استخدام السطر التالي بدلا من ذلك:

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

أنا نسخ ذلك في شبكة الإنترنت.التكوين في جملة الدليل ، وحصلت على سلوك مختلف...ولكن لا يزال لا يعمل.إذا كنت تحميل .ملف php في جملة الدليل الذي يدير phpInfo () ، في إطار Server API يقول CGI/FastCGI .هو أن إيجابية تأكيد أن FastCGI يتم استخدامها ؟ لماذا معالج في شبكة الإنترنت التكوين تشير إلى وحدات="CgiModule" بدلا من وحدات="FastCgiModule" (أنا لست حتى متأكدا من أنه موجود ، ولكن أنا فقط أجد ذكر CgiModule المشبوهة).

انها استضافت الموقع بقدر ما أنا أعرف أنني لم يكن لديك الوصول إلى ApplicationHost.config...

هل كانت مفيدة؟

المحلول

هنا اختبار بسيط:

  1. إنشاء phpinfo.php الملف مع

 <?php phpinfo(); ?> 

في الداخل ؛

  1. طلب http://yoursite.com/phpinfo.php/foobar?foo=bar

  2. تحقق من إخراج phpinfo والبحث عن _SERVER["REQUEST_URI"].

إذا كان هذا المتغير هو في عداد المفقودين ، ثم CGI يستخدم.إذا كان المتغير موجود و بشكل صحيح /phpinfo.php/foobar?فو=شريط, ثم إما ISAPI أو FastCGI يستخدم.تبدو بالقرب من أعلى إخراج Server API ؛ يجب تعيين إما ISAPI (مما يعني ISAPI المستخدمة) أو CGI/FastCGI (مما يعني FastCGI تستخدم ، لأننا بالفعل استبعاد CGI).

نصائح أخرى

يمكنك استخدام (على centos) apachectl -M, سوف تظهر ما وحدات ممكنة:

apachectl -M:

file_cache_module (مشترك) mem_cache_module (مشترك) version_module (مشترك) fastcgi_module (مشترك)

للأسف, فحص \_SERVER["REQUEST_URI"] لم يكن العمل بالنسبة لي.باستخدام CGI أو FastCGI, دائما عرض /phpinfo.php/foobar?foo=bar.

ولا أرى إذا Server API = CGI/FastCGI كان من المقرر - أن يخبرك بما واجهات النسخة المترجمة من يدعم php, وليس ما يتم استخدامه.ومع ذلك ، وجدت طريقة أخرى قد تكون أكثر موثوقية.

ارتمى ملف في مكان يسمى phpinfo.php التي تحتوي على النص: <? php phpinfo(); ?>

التحقق من متغير \_ENV["REDIRECT_HANDLER"]:
إذا تم تعيين php5-fastcgi (أو أي شيء آخر fastcgi العش) طلب الأرجح ذهبت من خلال FastCGI.إذا تم تعيين application/x-httpd-php (أو أفترض شيئا آخر غير ما سبق) ، يتم استخدام CGI.

غير أن وسيلة مؤكدة النجاح هو طريق تشغيل اختبار قليلا.كنت في حاجة إلى ab (أباتشي البدلاء) أداة لهذا.
على حد سواء مع ودون CGI, تشغيل من جهاز آخر:

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

التحقق من خط Time taken for tests:.على الأقل الوصول إلى VPS أكثر من 1.3 ميغابايت في الثانية اتصال ADSL, FastCGI تماما بلغوا الحد الاقصى من ذلك ، بينما مع CGI فقط قادرة على ملء نصف من ذلك.

ويساعد هذا الأمل.

php_sapi_name() أو PHP_SAPI ، سواء العمل.

http://php.net/manual/en/function.php-sapi-name.php

<?php
    if (php_sapi_name() != 'cgi-fcgi'){
        echo 'I knew fastcgi wasn\'t working.';
    }else{
        echo 'Holy crap, something worked for once.';
    }

جملة يخلق .ملف htaccess مع كتابة القواعد في ذلك إلى تمكين محرك بحث ودية عناوين المواقع.إذا كنت تستخدم Apache سوف تحتاج إلى تعيين "AllowOverride FileInfo" الدليل الذي يحتوي على جملة التثبيت.إذا كنت تستخدم IIS سوف تحتاج إلى وحدة مثل IISModRewrite.وهنا تعليمات هذا:[http://www.micronovae.com/ModRewrite/articles/SEFJoomla.html]

يجب أن تشاهد الإشارة إلى أنه من

<?php
phpinfo();
?>

Server API = CGI/FastCGI

تأكد من الأشياء التي يتم إعدادها في البداية إلى حيث فشل البرنامج النصي تماما عندما fastcgi لا يعمل.ثم عليك أن تعرف عندما يعمل ، fastcgi الشيطان هو السبب.

هذا عملت بالنسبة لي.

/**
 * 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');
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top