Los problemas de drupal con php5

Hola.

Estoy usando drupal en un hosting que usa php5.0.3 y me he topado con un problema que parece ser habitual.
Drupal no está preparado para esta versión y he sufrido mensajes de error del tipo

"Fatal error: Only variables can be passed by reference in *"

y como no soy programador experimentado, me ha traido de cabeza.

He encontrado una explicación en http://drupal.org/node/32881
Resulta que php5 no permite pasar como argumento por referencia nada que no sea una variable, y en drupal hay algunos
intentos de pasar constantes por referencia, o algo parecido. No termino de entenderlo bién porque mi
inglés es muy muy precario.

Yo he conseguido que el sitio me funcione haciendo lo siguiente:

1) Localizar el fichero y la linea que genera el error.
Eso es facil, la linea de error te da la información.

2) Identificar la función que requiere una variable que no se le proporciona.
-Mirar que funciones contiene la linea. La mayor parte de las veces es solo una.
-Averiguar que prototipo tiene la función que creemos que da el problema. Esto lo hago llendo a
http://drupaldocs.org/api
y ahí busco la función conflictiva, veo su prototipo e identifico el parámetro problemático.
Ese parámetro llevará un "&" delante -indicativo de que se pasa por referencia-.

3) Guardar el valor del parámetro que se le pasa a la función en una variable. Hay que escribir esta línea antes
de la que genera el error.
Supongamos que el parámetro es "micadenaliteral".Habria que hacer $variable="micadenaliteral";
Supongamos que el parámetro es otra función. Habria que hacer $variable=unafución(argumento);
O sea, de forma general sería $variable=la_expresion_que_sea_y_que_tiene_un_valor

4) Subtituir, en la funcion que da el error, el argumento que no era una variable por la variable.

5) Subir el archivo corregido al sitio correspondiente y actualizar la página que no funcionaba.

Un ejemplo:

El error:
Fatal error: Only variables can be passed by reference in
/Library/Apache2/htdocs/drupal/modules/system.module on line 649

La linea 649 de system.module es:
file_check_directory(variable_get('file_directory_path', 'files'), FILE_CREATE_DIRECTORY, 'file_directory_path');

La funcion file_check_directory es candidata a problemática. Busco su prototipo en http://drupaldocs.org/api y veo que
es:
file_check_directory(&$directory, $mode = 0, $form_item = NULL)
y veo que el primer argumento se pasa por referencia (tiene un & delante)

Dejo el código como sigue:

$variable=variable_get('file_directory_path');
file_check_directory($variable, FILE_CREATE_DIRECTORY, 'file_directory_path');

Y ya está arreglado.

En http://drupal.org/node/26033 se habla de parches para solucionar estos problemas, pero a mi me cuesta
mucho entender lo que dice.
Supongo que dan una mejor solución que la que yo propongo.
Si alguien fuera tan amable de leerselo y explicar para que sirven exactamente y como se aplican estos parches
le estaría muy agradecido.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

pues si vamos al

pues si vamos al quick&dirty...
Original
file_check_directory($directory, $mode = 0, $form_item = NULL)
QyD:
file_check_directory($foo = $directory, $mode = 0, $form_item = NULL)
es una solución :)

Jairo Enrique Serrano Castañeda
Ingeniero de Sistemas

Que significa

Que significa quick&dirty?

Tu solución no funciona en todos los casos.
En el caso de la linea 713 no me funcionó. No se php y no se porqué, pero tuve que guardar el valor de la expresión "arg(4)" en una variable y luego usarla en la función en substitución del original.

¿No hay una solución más general que no obligue a ir corrigiendo código línea a línea?