Inicio arrow Noticias arrow Noticias - Programación arrow copiando archivos con PHP con SAFE MODE ON
Advertisement
Destacamos

He rescatado del anterior CMS , mis artículos sobre certificados digitales con OpenSSL.


CONTRATAME!

Ahora desde shadowsland puede contratar mis servicios como programador freelance.

Si desea un presupuesto puede pulsar la opción Presupuesto del menú principal, rellene los datos y me pondré en contacto con usted. 

 
copiando archivos con PHP con SAFE MODE ON PDF Imprimir E-Mail
Escrito por Administrator   
Wednesday, 26 de September de 2007
Índice del Artículo
copiando archivos con PHP con SAFE MODE ON
Página 2
Página 3

Image

Mis ilustres shadowslanders,

Habitualmente nos podemos encontrar que en el servidor donde tenemos alojada nuestra página web, esta configurado con el  SAFE MODE activado.

Normalmente esto se suele encontrar en hostings cuyo servidor esta compartido con numerosos usuarios y diferentes aplicaciones. Es decir que cada usuario tiene su home y es donde el ubicará sus páginas, pero el servidor dispone de una o más home para cada uno de sus clientes.

Y que tiene que ver el SAFE MODE en todo esto ?

Imaginemos un caso, imaginemos que yo dispongo de una web en un servidor compartido. Yo podría crear por ejemplo una página en PHP que se repateara el resto de directorios compartidos y fuera borrando el resto de la webs.

Para evitar este problema los administradores activan el SAFE MODE. El SAFE MODE  pone restricciones a determinados funciones catalogadas de peligrosas, por ejemplo mkdir(), rmdir(), rename(), unlink(), copy(), chown(), chmod(), unlink(), etc...

Estas restricciones consisten, casi todas en verificar si  el  UID del script que esta siendo ejecutado coincide con el fichero o directorio a operar.

Vale y cual es el problema ?

El problema es que normalemente el apache está siendo ejecutado como usuario apache,  el cual ha sido definido httpd.conf y en este tipo de nuestras páginas tendrán como propietario a nuestro usuario. Con lo cual imaginemos que tenemos un fichero del cual somos propietarios, y un script en php que quiere copiar ese fichero a otra ubicación de nuestra web , como el script php es ejecutado por el usuario apache y el fichero a copiar es de nuestra propiedad no permitira hacer esta operación.

Y aquí os presento una posible solución para poder copiar ficheros desde php, saltandonos la seguridad del SAFE MODE.

Espero que os guste,

El Capi. 

 

 

 

 

Bueno el truco de saltarse la seguridad del SAFE MODE, consiste en realizar las operaciones con ficheros y directorios via FTP. Es decir desde nuestro script php hacemos una conexión  via FTP al mismo servidor donde tenemos nuestro script php. Y una vez conectados haremos las  operaciones que tengamos que hacer con los ficheros y directorios.

Para que lo vayais entendiendo, voy a implementar dos funciones una que sirve para crear directorios via FTP y la otra para copiar archivos via FTP:

La funcion FtpMkdir, sirve para crear un directorio mediante FTP, admite dos parámetros:

        $path -> es directorio donde queremos crear el nuevo directorio. La ruta
         debe ser absoluta, segun nuestro FTP ya que nos conectamos via FTP

        $newDir -> es el nombre del directorio que deseamos crear

 function FtpMkdir($path, $newDir)
  {
     $server='ftp.miserver.com'; // definimos el servidor donde esta nuestra web
     $connection = ftp_connect($server); // hacemos la conexión

     // login al servidor ftp
     $user = "miusuario";  // definimos el usuario
     $pass = "mipassword";  // definimos el password

     // realizamos el login al ftp
     $result = ftp_login($connection, $user, $pass);

     // Verificamos si la conexión ha sido exitosa
     if ((!$connection) || (!$result)) {
       return false;
       exit();
      }
      else  // si la conexión es exitosa
      {
        // Nos posicionamos en el directorio donde queremos crear el nuevo directorio
        ftp_chdir($connection, $path);
       
        // Creamos el nuevo directorio
        if(ftp_mkdir($connection, $newDir))
           {
                // le ponemos los permisos deseados al nuevo directorio
                ftp_site($connection, "CHMOD 777 $path/$newDir") or die("FTP SITE CMD failed.");
                return $newDir;
            }
         else
            {
                return false;
            }
        ftp_close($connection); // cerramos la conexion
        }
   }



Observar, que lo que hacemos en la funcion FtpMkdir es conectarnos al servidor via FTP, si la conexión se ha realizado correctamente utilizaremos la función ftp_chdir()
para hacer chdir(), es decir posicionarnos dentro del directorio donde queremos realizar el nuevo directorio.

Una vez dentro del directorio creamos el directorio con la función ftp_mkdir().

Finalmente si el directorio ha sido creado correctamente le ponemos los permisos deseados:
         ftp_site($connection, "CHMOD 777 $path/$newDir")



Modificado el ( Thursday, 04 de October de 2007 )
 
Siguiente >
Patrocinados
home contact search contact search