PHP ne fonctionne pas dans Apache2 après la mise à niveau du système

14

Récemment mis à niveau mon système de Karmic à Lucid. Cela impliquait que Apache et PHP soient mis à jour je crois.

Maintenant, mon serveur est incapable de gérer les fichiers PHP, toute navigation vers eux déclenche le téléchargement plutôt que l'analyse.

Le module PHP est toujours chargé dans Apache mods-enabled et je l'ai AddType application/x-httpd-php .phpdans mon httpd.conf.

Il n'y a pas de messages significatifs dans l'accès Apache ou les journaux d'erreurs, donc je suis perplexe.

Toute aide serait appréciée. Merci.

Jivings
la source

Réponses:

17

/var/log/apache2/error.log devrait afficher une ligne comme ci-dessous si PHP a été chargé avec succès:

[Mar 30 août 12:53:36 2011] [avis] Apache / 2.2.14 (Ubuntu) PHP / 5.3.2-1ubuntu4.9 avec Suhosin-Patch configuré - reprise des opérations normales

Faites attention à la date, si c'est quelque chose de 2009, vous avez mal configuré quelque chose.

AddType est inutile, vous devez utiliser:

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

Voir aussi le instructions d'installation sur php.net pour Apache 2.x .

Vous ne devriez pas avoir besoin d'ajouter cela manuellement, le package libapache2-mod-php5installe /etc/apache2/mods-available/php5.confcontenant:

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Puisqu'il s'agit d'un fichier de configuration, il est possible qu'il ne soit pas installé avec la mise à niveau. Pour corriger cette purge puis la réinstaller:

sudo apt-get purge libapache2-mod-php5
sudo apt-get install libapache2-mod-php5

Pour activer PHP, vous devez exécuter:

sudo a2enmod php5

Redémarrez le serveur Web après:

sudo /etc/init.d/apache2 restart

Autres choses à faire:

  • vérifiez les paramètres en conflit dans /etc/apache2.
  • avez-vous construit Apache à partir des sources?
  • Exécutez sudo apache2ctl configtestpour vérifier les erreurs de syntaxe dans votre configuration
  • Ouvrez http: // localhost / server-info pour vérifier la configuration et les modules chargés. Le statusmodule doit être chargé pour cela. Si vous utilisez un serveur distant, vous devez vous ajouter à la Allow fromliste /etc/apache2/mods-enabled/status.confet redémarrer le serveur par la suite
Lekensteyn
la source
Brillant. AFK en ce moment, mais va tester cela ce soir. Merci.
Jivings
Purgé et réinstallé, le module est chargé dans les mods, mais j'ai toujours le même problème ... Je ne trouve rien qui serait en conflit et l'inclusion des fichiers conf est définitivement présente dans apache.conf. As-tu d'autres idées? Merci.
Jivings
@Jivings: quelques idées de débogage ajoutées
Lekensteyn
Toujours incapable de le comprendre. Cependant, j'ai découvert quelque chose d'encore plus curieux. Il semble que PHP fonctionne bien pour l'un des hôtes virtuels qui est configuré, bien que tout ce qu'il fait est de définir un documentRoot dans / var / www. Comment est-ce possible?!
Jivings
1
Vous devrez toujours vider le cache de votre navigateur et redémarrer apache.
Francesco
3

Eh bien, après que rien d'autre n'ait fonctionné et qu'Apache devenait très confus, j'ai finalement purgé tous les packages Apache et les ai réinstallés.

Semble bien fonctionner maintenant, qui sait ce qui n'allait pas ...

ÉDITER

J'ai découvert ce qui n'allait pas lorsque je reconfigurais mes paramètres de configuration Apache. [Cette entrée de blog] [1] l'explique.

Il s'avère que bien que le module userdir ne soit pas activement utilisé, le reste des fichiers de sites résident dans mon dossier ~ / public_html, et php était désactivé pour tout ce qu'il contient.

Je suppose que cela a dû être un ajout récent au module php qui n'était pas présent dans mes paramètres Karmic.

Jivings
la source
1
Cela devrait être lié à un problème de configuration. Lors des mises à niveau, aucun fichier /etcn'est copié afaik (au moins, quelqu'un a eu un problème avec le fait de /etc/init.d/apache2ne pas être créé lors de la réinstallation, uniquement lors de la purge + installation)
Lekensteyn
Étrange que cela ait fonctionné avant la mise à niveau de mon système alors ...
Jivings
probablement un changement de fonctionnalité alors. Vous ne pouvez pas vous attendre à ce que chaque mise à niveau respecte les anciens paramètres de configuration. Certaines modifications auraient du sens pour la majorité mais pas pour d'autres.
Lekensteyn
En effet. Merci de m'avoir aidé à aller au fond de toute façon, très apprécié :)
Jivings
1

le php5.conffichier /etc/apache2/mods-enabledcontient quelques lignes en bas qui empêchent php de s'exécuter à l'intérieur d'un répertoire utilisateur, donc cela pourrait aussi être votre problème en fonction de votre configuration. Vous pouvez simplement commenter ces lignes et recharger apache2

Jeff
la source