Andrea Beggi

Chiacchierare di nubi.

WordPress e PHP5

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Utilizzando WordPress su hosting con PHP versione 5, ho incontrato problemi di funzionamento per alcuni plugin. Sono interessati soprattutto quelli consistenti in più file diversi. Il problema si manifesta con il mancato funzionamento del plugin e/o della sua pagina di configurazione.
A quanto ho capito, è dovuto alla diversa gestione dei path fra PHP4 e PHP5: quando i files esterni vengono chiamati, è necessario utilizzare il path esplicito.
Ad esempio

< ? php
include 'include/conf.php'
?>;

andrà sostituito con:


< ? php
include '/var/www/vhosts/andreabeggi.net/include/conf.php'
?>;

In alternativa si può usare:


< ? php
echo dirname(__FILE__);
?>

che restituisce il path assoluto.
A causa della mia incompetenza non riesco a modificare tutti i plugin che vorrei, perché alcuni hanno una struttura abbastanza complessa di funzioni nestate le une dentro le altre.
Soluzioni alternative? C’è qualche PHP übergeek là fuori?

16 Commenti

ludo | #

Uber non lo so, geek è probabile… spara 🙂

Francesco | #

allora era per questo che non funzionava il mio? 😀

Daxeel | #

Un poco OT: qualcuno usa WordPress 2.1.x con PHP 5.2.x senza problemi?
A me wordpress 2.0.5 non andava con PHP 5.2.x . Vorrei sapere se hanno risolto visto che aggiornare PHP e poi ritornare alla vecchia versione è stato un po’ lungo…

Davide Salerno | #

Io non capisco perchè ho wp-cron che non mi esegue il backup automatico. Pensi che potrebbe essere un problema legato a WP e PHP5? Tutto il resto funge alla perfezione perchè mi sembra che dalla 2.0.7 in poi i problemi con PHP5 e anche Fast-CGI sono stati risolti.

Ora se non erro con la 2.0.9 dovrebbero essere anche finiti i casini che c’erano con PHP 5.2 ma non ne sono sicuro.

Dzamir | #

Io in locale ho installato php5 e wp 2.1 e sembra girare tutto bene! Magari potresti dire quali sono i plugin che ti danno problemi, in modo che posso provare se succede anche a me.

Rik | #

non uso wordpress e non sono un esperto conoscitore di php, ma con php5 non ho mai usato una cosa del genere:
include ‘/var/www/vhosts/andreabeggi.net/include/conf.php’
ma solo
include “folder/file.php”;

GaretJax | #

Io lo uso regolarmente su php5 sia in locale che sul server di prod e non da assolutamente problemi.

La gestione dei path solo assoluti in php5 comunque non è assolutamente vera, probabilmente c’è un altro problema.
Forse c’è un altro file nell’include_path che risponde a quell’indirizzo e carica quello al posto del file del plugin.

davidonzo | #

In effetti sarebbe il caso di sapere queli plugin non vanno…

Senza poter testare è difficile, e fra l’altro mi sembra strano che sia stato fatto un cambiamento tale nel core del php…
Senza poterlo testare (prendilo con le molle), potresti fare una cosa del genere.

Dichiari una nuova funzione:

function included($file){
include(dirname(__FILE__).”/”.$file);
}

E nei file di plugin che non funzionano fai un replace generale di “include” con “included”.

Forse è una stronxata, ma non potendo testare non saprei cosa altro fare…

Rik | #

stavo provando uno script e mi è venuta in mente una cosa.

se ti trovi in /prova/file1.php e includi un file php che si trova in una directory tipo
include (“directory/file2.php”);

e in file2.php includi un’altra cosa tipo:

include (“../altraDirectory/file3.php”);

il percorso è sempre relativo a file1.php, quindi il php va nella directory “/prova/altraDirectory/file3.php” e non in “/prova/directory/../altraDirectory/file3.php” come magari ci si potrebbe aspettare.
magari non c’entra niente, ma forse è una idea.

Andrea | #

Il problema è che con la versione precedente di PHP non ho mai avuto problemi, con la 5 molti plugin non vanno. E non sempre ci sono semplici include da modificare. Quello che vorrei sapere è se sono l’unico ad avere questi problemi con PHP5, oppure la cosa è generalizzata. E vorrei sapere anche se (mi invento) lo posso risolvere con un qualche dichiarazione in un posto solo, senza dovoer spulciare tutto il codice, dato che non sempre sono in grado.

fullo | #

il problema potrebbe derivare da PHP configurato come CGI (che quindi interpreta come path di esecuzione quello impostato da apache).

se php è configurato come si deve puoi provare modificare il file .htaccess inserendo la seguente direttiva:
php_value include_path “.:/path/di/default/:/nuovo/path”

copiando in /path/di/default gli attuali include path di php, li vedi dal phpinfo() e in /nuovo/path il path dei file che vuoi far caricare in automatico.

mi raccomando di lasciare il primo “.:”

cyberflaz | #

Magari basta fargli, a monte, un chdir su dirname(__FILE__)!

Giorgio Zanetti | #

Utilizzo anch’io WebPerTe per l’hosting del mio blog e ho lo stesso problema con alcuni plugin (anche con Php-Stat dopo il passaggio a PHP5, ma non so se dipende da questo…).

A gennaio ho aperto un ticket e l’assistenza mi ha risposto così: “è un problema con il PHP 5 […]. Viene richiesto un path assoluto anziché quello relativo”. Per cui è necessario andare a modificare a mano il codice quando serve.

Dato che conosco poco o nulla di PHP, ho chiesto a persone più esperte di me se questa era una limitazione della versione 5. La risposta è sempre stata la stessa: no.

Credo perciò dipenda da qualche configurazione eccessivamente restrittiva di WPT, che però trovo davvero molto fastidiosa (già mi obbligano a fare i conti con il safe_mode attivo e i problemi che si creano talvolta con proprietà e permessi dei file).

Spero che i responsabili di WPT (tengo a sottolineare che sono comunque molto soddisfatto della loro affidabilità, serietà ed efficienza nell’assistenza) si rendano conto dei disagi e ci vengano incontro semplificandoci la vita.

Io | #

Occhio a come usate l’inclusione dei file locali con PHP 😉