Marzo 2010
L M X J V S D
« Feb    
1234567
891011121314
15161718192021
22232425262728
293031  

Actualizando los plugins de Wordpress

El otro día hablaba sobre la migración del blog entre diferentes versiones de Wordpress, y el problema que había tenido a la hora de importar las entradas (por la función set_time_limit() y ejecutar PHP en modo seguro). Aunque ya pude resolver el problema, en un principio ignorando los errores para importar todas las entradas, y posteriormente mediante el acceso a la configuración del servidor que me proporcionó el proveedor de hosting, no terminó aquí la cosa. Si deseaba actualizar los plugins que estaba usando, podía optar por hacerlo manualmente (descargando la nueva versión del plugin y reemplazando la antigua por esta mediante FTP, procediendo a continuación a configurarlo nuevamente si era preciso), o bien mediante el instalador automático que incorpora Wordpress a tal efecto. Sin embargo, al intentar hacerlo así obtenía un error de permisos:

Downloading update from http://downloads.wordpress.org/plugin/akismet.zip
Unpacking the update
Could not create directory: /xxxxx/yyyyy/wp-content/upgrade/akismet/akismet/
Installation Failed

Sin embargo, esto me extrañó, ya que el usuario asociado a Wordpress tiene los suficientes permisos para subir archivos y crear directorios en el servidor. Investigando un poco, me encontré con un error reconocido para la función mkdir() de las versiones 5.2.3 y 5.2.4 de PHP: no permite crear directorios en modo seguro si la ruta del directorio a crear termina en una barra (slash, "/"). Me dije que no podía deberse a esto... pero sí. Si abrimos el archivo class-wp-filesystem-direct.php (dentro del directorio wp-admin/includes de Wordpress) nos encontraremos con una función mkdir con la siguiente definición:

function mkdir($path,$chmod=false,$chown=false,$chgrp=false)

Esta función mkdir crea un directorio en la ruta especificada dependiendo de los permisos del usuario y grupo que esté intentando llevar a cabo dicha operación. Si al principio del cuerpo de la función comprobamos si estamos en modo seguro, y si es así eliminamos el último carácter de la ruta, si ésta termina en barra...

PHP:
  1. if(substr($path, -1) == '/' && ini_get('safe_mode'))  $path = substr($path, 0, -1);

Hecho esto, probé a actualizar los plugins y funcionaba correctamente, sin necesidad de desactivar en ningún momento el modo seguro en el servidor.


Entradas relacionadas:
  • Fin de semana tardío
  • Betas… y enlaces recomendados
  • Acelerando Wordpress
  • La perfidia del software
  • Un mes sin publicar
  • Etiquetas: , ,

    Control básico de acceso en PHP

    Un amigo me preguntaba ayer cómo incluir un control de validación en un sitio web de una forma muy sencilla. Deseaba restringir el acceso a determinados usuarios a la descarga de un determinado recurso. Aunque evidentemente no se trata de la mejor forma de proteger una determinada información, ya que el servidor soportaba PHP, y sin necesidad de montar una base de datos, una posible solución podía ser usar la tupla de variables de servidor $PHP_AUTH_USER, $PHP_AUTH_PW para controlar el acceso, a través de un array de parejas nombre_de_usuario/contraseña. La implementación es muy sencilla, y aunque como ya apuntaba no es la mejor a la hora de proteger nuestra información, puede servirnos para salir del apuro y proteger una información determinada sin necesidad de tocar, por ejemplo, los archivos .htaccess y .htpasswd, por ejemplo, o de montar una infraestructura mayor con el mismo fin.

    A continuación dejo el código en PHP. Bastaría, por ejemplo, con usarlo como un archivo index.php, incluirlo en la ruta que deseemos proteger, e incluir al final del código (tras el tag de cierre de PHP, ?>) el código HTML que deseemos mostrar en caso de que el usuario de autentique correctamente (por ejemplo, una página con el enlace al recurso que deseemos mostrar).

    PHP:
    1. <?php
    2.  
    3. // Introducir aquí los usuarios que deseemos que tengan acceso al recurso
    4. $lista[0]['usuario']='pepe';
    5. $lista[0]['password']='cables';
    6.  
    7. $lista[1]['usuario']='juanito';
    8. $lista[1]['password']='piscinas';
    9.  
    10. //...
    11.  
    12. function autenticar($u,$p)
    13. {
    14. global $lista;
    15.  
    16. foreach ($lista as $datos)
    17. {
    18. if ( ($datos['usuario'] == $u) AND ($datos['password'] == $p)   )
    19. {
    20. return TRUE;
    21. }
    22. }
    23. return FALSE;
    24.  
    25. }
    26. // $PHP_AUTH_USER, $PHP_AUTH_PW
    27. $user = $_SERVER['PHP_AUTH_USER'];
    28. $pass = $_SERVER['PHP_AUTH_PW'];
    29.  
    30. if ( !autenticar($user,$pass) )
    31. {
    32. header('WWW-Authenticate: Basic realm="Acceso restringido."');
    33. header('HTTP/1.0 401 Unauthorized');
    34. echo 'Autentifación No Válida';
    35. }
    36. <p style="text-align: justify;">?&gt;

    Puedes descargar el código desde el siguiente enlace:

    [download#10]


    Entradas relacionadas:
  • La libertad de los internautas europeos en juego
  • Open Parliament
  • La web de la Presidencia europea
  • Mapas “virtuales”
  • Disponibilidad, nula
  • Etiquetas: , , ,

    |