16.04 तक अपग्रेड करें। php7 ब्राउज़र में काम नहीं कर रहा है


69

मैंने अभी 14.10 से 16.04 तक अपग्रेड किया है और मुझे नहीं पता कि Apache में PHP 7 को कैसे कॉन्फ़िगर किया जाए। मैंने php7.0.conf फाइल को उस आखिरी लाइनों को अनफिल्ट करने के लिए संशोधित किया था, जो अपाचे 2 को पुनः आरंभ करता है और कोई परिवर्तन नहीं।

क्या मुझे php की अनुमति देने के लिए apache2 सेटअप को बदलने की आवश्यकता है?

PHP कमांड लाइन से काम करती है इसलिए मुझे यकीन है कि php ठीक से स्थापित है।

इसके अतिरिक्त, मुझे phpadmin पर यह कहते हुए एक त्रुटि मिलती है कि mbstring गायब है।


1
कार्य सीएलआई SAPI ( phpकमांड) अन्य PHP SAPIs (Apache2, FPM, CGI, ...) के लिए ऑर्थोगोनल है, इसलिए कमांड लाइन PHP में काम करना HTTP सर्वर में PHP के काम करने के बारे में कुछ नहीं कहता है।
oerdnj

2
लापता mbstring के लिए: sudo apt-get install php-mbstring(जो सोचा होगा, ठीक है?)
oerdnj

"Php7 ब्राउज़र में काम नहीं कर रहा है" क्या मतलब है? क्या आप अपाचे के बारे में बात नहीं कर रहे हैं? PHP क्लाइंट साइड की भाषा नहीं है।
एंड्रिया लज्जाज़ारो

यह वास्तव में निराशाजनक है कि इन सभी उत्तरों को देखकर उपयोगकर्ता mpm-prefork और mod-php को सक्षम कर सकते हैं। यह एक बहुत बड़ा कदम है।
एंड्रयू एनस्ले

जवाबों:


81

पहले की तरह, आपको Apache के लिए PHP इंस्टॉल करना होगा।

से सर्वर गाइड :

sudo apt install php libapache2-mod-php

वह कमांड PHP और Apache 2 PHP मॉड्यूल स्थापित करेगा। बस अपाचे को पहले की तरह कॉन्फ़िगर करें ( sudo a2enmod php7.0मुझे लगता है, मॉड्यूल चालू करेगा)।


आपका mbstringमुद्दा समान है - आपको वह एक्सटेंशन इंस्टॉल करने की आवश्यकता है:

sudo apt install php7.0-mbstring

अन्य लापता मॉड्यूल के लिए भी ऐसी ही चीजें स्थापित करनी होंगी।


स्थापना पर डिफ़ॉल्ट रूप से php मॉड्यूल को सक्षम किया जाना चाहिए। यदि नहीं, तो यह पूर्ण होना चाहिए sudo a2enmod php7.0(या इसलिए मैंने अपने कंप्यूटर पर अक्षम और पुन: सक्षम करके निर्धारित किया है।) दिलचस्प है, मुझे यह संदेश मिला:Considering conflict php5 for php7.0: Enabling module php7.0.
डग स्माइटीज

@DougSmythies मैं आपने पढ़ा नही मैं कहाँ कहा कि तुम मॉड्यूल ... सक्षम करने के लिए मान लेते हैं
थॉमस वार्ड

1
हां, मैंने किया, यही वजह है कि मैंने टिप्पणी की। sudo a2enmod phpकाम नहीं करेगा, मैंने यह कोशिश की। हालांकि sudo a2enmod php7.0काम करेंगे।
डग स्माइथीज

1
इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। उबंटू 16.04 की ताजा स्थापना में डिफ़ॉल्ट रूप से यह अपाचे 2 मॉड्यूल शामिल नहीं है।
सेलोसिंडिस

@Selosindis बिलकुल सहमत! हालांकि, उबंटू 16.04 के साथ पुराने संस्करणों की तुलना में मानक इंस्टॉलेशन प्रक्रिया बदल गया है।
सुकरात

40

अपने सर्वर से चलने के लिए php7 को कॉन्फ़िगर करने के लिए आपको कुछ विन्यास करने की आवश्यकता है:

1. सुनिश्चित करें कि आप के किसी भी निशान को हटा दें php/php5

टर्मिनल खोलें Ctrl+ Alt+ Tऔर:

cd /etc/apache2/mods-enabled
ls -la

आउटपुट में कोई भी या नहीं होना चाहिए , लेकिन अगर यह होता है, तो निम्न कार्य करें:php5.confphp5.load

# this is the proper way of disabling modules
sudo a2dismod php5

# run this only if the above command didn't remove the php5 sym-links
sudo rm php5.load
sudo rm php5.conf

अब php7.0.confऔर php7.0.loadइसके बजाय जोड़ें :

# this is the proper way of enabling modules
sudo a2enmod php7.0

# run this only if the above command didn't create the php7.0 sym-links
sudo ln -s php7.0.conf ../mods-available/php7.0.conf
sudo ln -s php7.0.load ../mods-available/php7.0.load

आउटपुट ls -la php*इस तरह दिखना चाहिए:

lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.conf -> ../mods-available/php7.0.conf
lrwxrwxrwx 1 root root 29 Apr 15 03:55 php7.0.load -> ../mods-available/php7.0.load

मॉड्यूल से निपटने के बाद अब हम /etc/apache2/conf-enabledनिर्देशिका में आते हैं । Php / php5 के किसी भी निशान को यहाँ तक निकालेंsudo rm <name>

फिर, यदि आवश्यक हो:

# the proper way of enabling configs
sudo a2enconf php7.0-cgi
sudo a2enconf php7.0-fpm

# do those commands only if the above didn't work out
sudo ln -s php7.0-cgi.conf ../conf-available/php7.0-cgi.conf
sudo ln -s php7.0-fpm.conf ../conf-available/php7.0-fpm.conf

आउटपुट ls -la php*इस तरह दिखना चाहिए:

lrwxrwxrwx 1 root root 33 Apr 21 17:00 php7.0-cgi.conf -> ../conf-available/php7.0-cgi.conf
lrwxrwxrwx 1 root root 33 Apr 21 17:01 php7.0-fpm.conf -> ../conf-available/php7.0-fpm.conf

2. अपाचे 2 को फिर से शुरू करना

अपाचे को पुनरारंभ करने से पहले अपाचे को साफ करना सुनिश्चित करें error.logफिर शुरू करें:

sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

अब error.logजारी करके जांच करें cat /var/log/apache2/error.log | less(कम पाइप के माध्यम से आपको ऊपर और नीचे आसान स्क्रॉल करने में सक्षम बनाता qहै, आउटपुट को बाहर निकालता है)।

यदि आपके error.logमें कई हैं (और मेरा शाब्दिक अर्थ है ढेर ) कुछ MIBS not foundनिम्नलिखित करते हैं:

sudo apt install libsnmp-dev
sudo net-snmp-config --snmpconfpath
sudo apt-get install snmp snmp-mibs-downloader
sudo su
> /var/log/apache2/error.log
exit
sudo service apache2 restart

error.logइसे फिर से जांचें अब इसमें केवल 3 लाइनें होनी चाहिए:

[Sat Apr 23 01:39:07.504005 2016] [mpm_prefork:notice] [pid 1647] AH00169: caught SIGTERM, shutting down
[Sat Apr 23 01:39:08.685774 2016] [mpm_prefork:notice] [pid 9590] AH00163: Apache/2.4.18 (Ubuntu) mod_perl/2.0.9 Perl/v5.22.1 configured -- resuming normal operations
[Sat Apr 23 01:39:08.685938 2016] [core:notice] [pid 9590] AH00094: Command line: '/usr/sbin/apache2'

Php7.0 के साथ आपकी अपाचे को अब ठीक से कॉन्फ़िगर किया जाना चाहिए।


2
/ (इसी तरह, और के लिए ) लिंक के साथ मैन्युअल रूप से छेड़छाड़ करने के बजाय a2enmodऔर a2dismodकमांड का उपयोग करें । mods-availablemods-enableda2enconfa2disconfconf-{available,enabled}
मुरु

1
आपके इनपुट के अनुसार मेरे उत्तर को संशोधित किया।
विदेहोनथ

लिंक्स के साथ फ़िडलिंग हानिकारक है a2enmodऔर a2dismodआंतरिक अपाचे 2 पैकेज रजिस्ट्री में मॉड्यूल की स्थिति को याद रखें, इसलिए लिंक को मैन्युअल रूप से बनाना / निकालना भविष्य के उन्नयन के लिए आपके सिस्टम को तोड़ सकता है क्योंकि नवीनीकरण स्क्रिप्ट इस आंतरिक डेटाबेस की स्थिति को देखती है।
oerdnj

@oerdnj: आमलेट बनाने से अंडे टूट सकते हैं ... ;-)
Fabby

1
@ डेविड राइट - शायद आप उपयोगकर्ता निर्देशिका से PHP स्क्रिप्ट को चलाने की कोशिश कर रहे हैं - ये डिफ़ॉल्ट रूप से अक्षम हैं। यदि ऐसा है तो आपको php7.0.conf खोलने की जरूरत है और पिछले भाग पर टिप्पणी करें। अधिक यहाँ devplant.net/2010/05/04/…
xcxc

12

मुझे भी यह समस्या हो गई।

इसने मुझे सभी PHP को हटाने और php7 को पुनर्स्थापित करने में मदद की।

सभी की जरूरत थी:

sudo apt-get purge php*

php7 हटा दिया जाएगा, बाद में बस पुनः स्थापित करने के लिए:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi  php7.0 libapache2-mod-php7.0

1
मैंने पहले भी कई कोशिश की है और यह तरीका मेरे लिए काम करता है। धन्यवाद!!!
श्रीकांत पोन्नपल्ली 1

1
हे भगवान। तुमने मुझे बचाया।
plhn

यह एकमात्र समाधान है जिसने मेरे लिए काम किया। चियर्स!
जीवे

इसने मेरी मदद की, क्योंकि उबंटू अपग्रेड के बाद मैंने php7.0-cgi को कॉन्फ्लिक्टेबल में पाया। लेकिन ध्यान रखें कि ऐसा करने sudo apt-get purge php*से आपका phpMyAdmin भी हट जाएगा, अगर आपके पास एक है।
अर्तुर कैज़ेवेस्की

8

Im मेरा मामला न केवल php काम नहीं कर रहा था, लेकिन phpmyadmin aswell मैं उस तरह कदम से कदम था

sudo apt install php libapache2-mod-php
sudo apt install php7.0-mbstring
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

और फिर:

gksu gedit /etc/apache2/apache2.conf

अंतिम पंक्ति में मैं जोड़ता हूं Include /etc/phpmyadmin/apache.conf

जो सभी समस्याओं से निपटते हैं


7

इस समस्या के लिए मुझे जो हल मिला वह था short_open_tag के लिए डिफ़ॉल्ट PHP.INI सेटिंग। डिफ़ॉल्ट रूप से यह 'ऑफ' पर सेट है। मेरा PHP कोड के साथ शुरू हुआ

   <?

के बजाय

   <?php

यदि short_open_tag को सक्षम किया गया (मेरी php.ini में 'Off' को 'On' में बदलकर) और apache सर्वर को रीसेट करें ( sudo service apache2 restart) और PHP वापस जीवित हो गया।


OMMFG! निश्चित रूप से यह बहुत ही अंतिम टिप्पणी होगी जो कि मेरे लिए काम करती है! बहुत बहुत धन्यवाद mf, @patrick !!!
हाइपरजियोमेट्रिक

0

https://wiki.archlinux.org/index.php/Apache_HTTP_Server

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
service apache2 restart

नोट: उपरोक्त की आवश्यकता है, क्योंकि इसके libphp7.soसाथ php-apacheकाम नहीं किया जाता है mod_mpm_event, लेकिन इसके बजाय केवल काम करेगा mod_mpm_prefork । ( एफएस # 39218 )

अन्यथा आपको निम्न त्रुटि मिलेगी:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1

एक विकल्प के रूप में, आप उपयोग कर सकते हैं mod_proxy_fcgi( नीचे php-fpm और mod_proxy_fcgi का उपयोग करके देखें )।


0

मैं भी, Ubuntu 16.04 पर कमांड लाइन से सफलतापूर्वक php स्क्रिप्ट चला सकता था, लेकिन किसी भी ब्राउज़र में नहीं। समस्या को हल करने के प्रयास में मैंने php7.0 और apache2 दोनों की अपनी मौजूदा प्रतियों को शुद्ध किया। इसके बाद मैंने कमांड लाइन से अपाचे 2 के php लाइब्रेरी सहित दोनों को फिर से इंस्टॉल किया। निराशा तब हुई जब मैंने "a2enmod php7.0" को चलाने का प्रयास किया, जिसने मुझे सूचित किया कि php7.0 मॉड्यूल इस तथ्य के बावजूद मौजूद नहीं था कि एक बार फिर मैं कमांड लाइन से php स्क्रिप्ट को चलाने में सक्षम था। वृत्ति ने लात मारी। Synaptic को खोलने पर, मुझे पता चला कि जब मैंने कमांड लाइन से apache2 php लाइब्रेरी स्थापित की थी, मैंने केवल libapache2-mod-php7.0 स्थापित किया था, और "आवरण", libapache2-mod- को स्थापित करना भी भूल गया था। php, जिसके बिना पूर्व कार्य नहीं करेगा।


1
"रैपर" का नाम क्या है?
इकोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.