web-dev-qa-db-fra.com

Les scripts php ne fonctionnent pas lorsqu'ils sont appelés à partir de balises php en html

J'ai un serveur nginx, avec php5-fpm, sous Ubuntu 15.10. les fichiers se terminant par ".php" se chargent correctement. Les fichiers HTML se chargent correctement. Mais quand je mets les balises <?PHP ?> dans un fichier html, les scripts php ne se chargent pas correctement. Je ne vois aucune erreur dans les journaux d'erreurs nginx ou php5-fpm qui jettent une lumière quelconque sur le problème. view source, dans le navigateur, répertorie le lien vers le script, plutôt que de l'exécuter comme je le souhaitais.

voici ma configuration nginx:

#cat default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /home/user/public_html;
    index index.php index.html index.htm;

   # server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ =404;
        autoindex on;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /404.html;
    location = /404.html {
        root /home/user/public_html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

le journal des erreurs php5-fpm est inutile:

$ Sudo cat php5-fpm.log 
[27-Dec-2015 07:55:13] NOTICE: error log file re-opened

le journal des erreurs nginx est également inutile:

$ Sudo cat nginx/error.log 
2015/12/29 01:30:20 [notice] 13111#0: signal process started

(c'était après avoir rechargé nginx)

en regardant le journal des accès nginx, il apparaît que les scripts php au sein du code HTML ne sont jamais traités. Sauf si appelé directement comme dans la dernière entrée:

var/log$ Sudo cat nginx/access.log 
...
192.168.1.10 - - [29/Dec/2015:01:35:32 -0500] "GET /Hnav/www/scripts HTTP/1.1" 301 193 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0"
192.168.1.10 - - [29/Dec/2015:01:35:32 -0500] "GET /Hnav/www/scripts/ HTTP/1.1" 200 312 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0"
192.168.1.10 - - [29/Dec/2015:01:35:34 -0500] "GET /Hnav/www/scripts/sidebar.php HTTP/1.1" 200 614 "http://192.168.1.10/Hnav/www/scripts/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0"

Je la supporte depuis un moment, mais j'en ai assez. Je veux vraiment que les balises <?PHP ?> dans les fichiers HTML fonctionnent, et je suis complètement bloqué. Je peux fournir plus de détails sur ce qui est nécessaire, mais je ne sais pas trop où aller à partir de maintenant.

5
j0h

Ouvrez le fichier /etc/php5/fpm/pool.d/www.conf:

Sudo nano /etc/php5/fpm/pool.d/www.conf

et ajoutez .html à la fin de la ligne suivante:

security.limit_extensions = .php .php3 .php4 .php5 .html
5
Tung Tran

Les solutions fournies ici entraîneront l’interprétation de tous les fichiers HTML avec le processus php-fpm. À moins que tous vos fichiers html incluent php, cela n’est pas très efficace.

Une meilleure solution consisterait à modifier votre site pour n’imposer aux fichiers contenant php que le temps système supplémentaire, par exemple. en les nommant avec l'extension .php.

2
Alan G Dixon

Ouvrez votre config nginx et dans la section location, ajoutez: |\.html pour que votre emplacement ressemble à ceci:

location ~ \.php$|\.html {

Juste testé et fonctionne bien. L'ajout de .html dans security.limits_extensions ne fonctionne pas pour moi.

2
Nikolay Nikolov