Posts tagged PHP

PHP

Como forzar la descarga de un archivo con PHP

0

Cada tanto necesitamos cosas así :)

/**
 * Downloader
 *
 * @param $archivo
 *  path al archivo
 * @param $downloadfilename
 *  (null|string) el nombre que queres usar para el archivo que se va a descargar.
 *  (si no lo especificas usa el nombre actual del archivo)
 *
 * @return file stream
 */
function download_file($archivo, $downloadfilename = null) {

    if (file_exists($archivo)) {
        $downloadfilename = $downloadfilename !== null ? $downloadfilename : basename($archivo);
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $downloadfilename);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($archivo));

        ob_clean();
        flush();
        readfile($archivo);
        exit;
    }

}

Uso:
Si queres que el archivo se descargue con un nombre distinto al original.

download_file("archivos/archivoReal.zip", "archivoEnmascarado.zip");

Si queres que el archivo se descargue con el nombre original.

download_file("archivos/archivoReal.zip");
Herramientas

Reemplazar la ñ, acentos, espacios y caracteres especiales con PHP [Actualizada]

10
/**
 * Reemplaza todos los acentos por sus equivalentes sin ellos
 *
 * @param $string
 *  string la cadena a sanear
 *
 * @return $string
 *  string saneada
 */
function sanear_string($string)
{

    $string = trim($string);

    $string = str_replace(
        array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
        array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
        $string
    );

    $string = str_replace(
        array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
        array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
        $string
    );

    $string = str_replace(
        array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
        array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
        $string
    );

    $string = str_replace(
        array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
        array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
        $string
    );

    $string = str_replace(
        array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
        array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
        $string
    );

    $string = str_replace(
        array('ñ', 'Ñ', 'ç', 'Ç'),
        array('n', 'N', 'c', 'C',),
        $string
    );

    //Esta parte se encarga de eliminar cualquier caracter extraño
    $string = str_replace(
        array("\\", "¨", "º", "-", "~",
             "#", "@", "|", "!", "\"",
             "·", "$", "%", "&", "/",
             "(", ")", "?", "'", "¡",
             "¿", "[", "^", "`", "]",
             "+", "}", "{", "¨", "´",
             ">", "<", ";", ",", ":",
             ".", " "),
        '',
        $string
    );

    return $string;
}

Ejemplo de uso:

echo sanear_string("áàäâªÁÀÂÄdoéèëêÉÈÊËreíìïîÍÌÏÎmióòöôÓÒÖÔfaúùüûÚÙÛÜsolñÑçÇlasi\\¨º-~#@|!\,·$%&/()?¡¿[^`]+}{¨´><;,:.	");

Lo anterior imprime “aaaaaAAAAdoeeeeEEEEreiiiiIIIImiooooOOOOfauuuuUUUUsolnNcClasi

debug

Instalar Xdebug en Ubuntu (cualquier versión)

1

Esto es mas bien un resumen de las instrucciones que nos deja el mismo creador de Xdebug en su pagina (http://xdebug.org/docs/install) mas un par de cosas que da por entendido que debemos saber :)

1) Lo primero es bajarse el código fuente de la ultima versión de Xdebug (la 2.1 es la ultima al día de la fecha)

http://xdebug.org/files/xdebug-2.1.0.tgz

2) Descompriman el archivo en una carpeta cualquiera

De acá en mas solo nos queda compilar configurar y probar:

3) Lancen el siguiente comando para asegurarse que tienen instaladas las librerías de desarrollo de php5 que son necesarias para poder compilar Xdebug:

apt-get install php5-dev

4) Entren en la carpeta por medio de la consola:

cd /ruta/a/la/carpeta/donde/descomprimiste/los/archivos/fuente/de/xdebug/xdebug-2.1.0/

5) Lanzar el comando phpize

phpize

6) Lanzar:

./configure --enable-xdebug
make
sudo make install

Al final del infierno de outputs de salen en la consola van a apreciar que se dibuja un recuadro como el que se ve en la siguiente imagen:

Bueno, justo encima de ese recuadro pueden ver que dice algo como “Installing shared extensions: /usr/lib/php5/20090626+lfs/“. Copien esa ruta.

Ya esta instalado Xdebug. Configuremos lo XD.

7) Editemos php.ini

sudo gedit /etc/php5/apache2/php.ini

Y en la ultima linea del archivo pequen lo siguiente:

zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000

NOTA: en la linea que dice “zend_extension” reemplacen la ruta del ejemplo por la que copiaron en el paso 6

8) Listo! todo en teoría funciona. para comprobarlo abran el IDE al que le tengan mas bronca y configurenlo!

Drupal!

Como ver las variables disponibles en una plantilla .tpl.php (PHPTemplate)

0

Otro de esos TIP que nos vienen sorprendente mente bien :) .

Si estas haciendo debug sobre una plantilla y necesitas saber cuales son las variables de las que dispones sobre la misma, te habras dado con el problema de que no se pueden ver. Osea, las variables existen, y si las mandas a imprimir con un echo() seguro que ahi está, pero hasta que no lo haces no podes saber siquiera que existe.

Bueno basta de intro, vamos a un ejemplo rapido y claro:

Si pones esta función en la plantilla que querés investigar, vas a poder ver un array ($variablesDisponibles para este ejemplo) de los nombres de todas las variables de las que dispone (y de sus contenidos también):

$variablesDisponibles = get_defined_vars();

Chau!

Drupal!

Drupal 6: Módulos y templates con acentos, “¿” y “ñ” mal codificados [solución]

2

Un problema con el que me suelo dar de tanto en tanto son las codificaciones de caracteres. En especial la de acentos, la ñ y el signo de pregunta de apertura (¿).

El problema mas común que me encontré en mis primeros tiempos como desarrollador de módulos de Drupal fue que de tanto en tanto abría un modulo, y este tenia los caracteres especiales hechos pedazos, mal codificados.

Probé con todo tipo de yerbas raras. Desde usar funciones de todo tipo de encoding de PHP hasta cambiar la collation de la DB…

Pero la solución estaba tan al alcance de la mano que me llegue a sentir un autentico boludo cuando me cayeron las fichas: ¡La codificación de los archivos!. Si señor/a, no me había fijado en la codificación de los archivos (*.module, *.php, *.install, *.inc, etc).

Lo único que hay que hacer para que todo funcione como la seda son unas pocas cosas:

Que el archivo esté codificado en UTF-8. Podés saber que codificación tiene abriéndolo con Notepad++ y yendo al menú “Formato” como se ve en la imagen:

Y si ven que no está seteado en “UTF-8 sin BOM” o “UTF-8”, pueden convertirlo a cualquiera de estos formatos en el mismo menú:
(Para nosotros usar “UTF-8 sin BOM” o “UTF-8” nos es indistinto :) )

En el caso de los IDE deben saber que Netbeans y Zend Studio de serie vienen configurados para crear y tratar a los archivos bajo UTF-8, mientras que Eclipse NO.

Entonces, si usas Eclipse solo tenes que tocar un detalle en la configuración general para despreocuparte de este asunto:
Vayan al menú “Window -> preferences” y en el menú de preferencias deben ir a “General -> Workspace”. Cambien la codificación que haya puesta por la de UTF-8 como se ve en la imagen.


Otra cosa mas. Si trabajan con GIT sepan que tampoco codifica los archivos en UTF-8, y se soluciona yendo a sus opciones y cambiándolo.

Con lo anterior podes olvidarte de tener problemas de codificación De hecho podes dejar de usar entidades HTML y demases, y solo con usar t(“áéíóúñ”) que no vas a tener mas problemas.

Lo ultimo que quiero comentar es que si trabajan con mas gente sobre estos módulos, asegurate que todos tengan bien configurado su IDE o editor para evitar que los codifique mal (con solo abrir un archivo UTF-8 con un editor que no esté en ese formato es muy posible que al editarle una letra y guardarlo lo haga pedazos!).

Go to Top