Delirios de un Informático

Delirando sobre informática, fotografía, programación, móviles y mucho más desde 2003

Usando PHP por linea de comandos (II)

Archivado en Software con fecha 28/Aug/2004 - 16 comentarios
Etiquetado con: command, line, php
Ya comenté hace tiempo que se puede usar PHP por la línea de comandos, pero en ese caso hablé de cómo hacerlo para Windows. Ahora que uso Linux también me puede interesar hacer determinados scripts con PHP ya que no tengo un conocimiento demasiado ampilo de Bash ni de Perl.

En un script Bash la primeira línea es #!/bin/bash y en uno de Perl es #!/usr/bin/perl. Del mismo modo la primera línea para un script PHP sería #!/usr/bin/php pero añadiéndole -q para que no imprima una cabecera indicando el tipo de archivo y la versión de PHP. Un script sencillo podría ser:
{ci~{fo~#!/usr/bin/php -q
printf("¡Hola mundo!\n");
?>}}
Y la saída por consola sería ¡Hola mundo!. Como veis es un como un arquivo PHP normal en el que cualquier cosa fuera de se muestra directamente. Este ejemplo mostraría en la consola Estamos a Sábado, 28 de agosto de 2004 a las 16:34:05:
{ci~{fo~#!/usr/bin/php -q
Estamos a setlocale(LC_TIME, "spanish");
$formato = "%A, %d de %B de %Y a las %H:%M:%S";
$fecha = ucfirst(strftime($formato, time()));
printf("$fecha\n");
?>}}
Además, si combinamos esto con PHP-Gtk podemos hacer pequeñas aplicaciones con interfaz gráfica.

Escuchando Sarah Brightman - A Winter Shade Of Pale en el disco A Winter Shade Of Pale

Antes de comentar...

Puedes escribir lo que quieras, pero por favor hazlo respetando a los demás y en relación al tema que se está tratando. Todo comentario insultante o fuera de lugar será eliminado

Está permitido utilizar las siguientes etiquetas HTML para formatear tu comentario: <a> <b> <blockquote> <i> <u>. Además también puedes utilizar estos emoticonos:

:) :( :'( :P ;) :D XD :O :S 8) :$ (A) (L) (K) |) (6) :@ +o( :|

Puedes enviar referencias a esta anotación utilizando esta dirección

Comentarios

Tuxiradical dijo hace 4 años y 48 meses:
Todo perfect, menos una cosilla.
PHP no tiene porque estar instalado en esa ruta (yo soy el primero que no lo tengo ahi XD).
sin embargo con
#! /usr/bin/env php -q
siempre deberia funcionar.
(env se encarga de buscar el programa php ;) ).
Aun asi, env no siempre esta ahi... pero si en la mayoria de los casos ;)

Saludos.

PS: Pruebalo, no vaya a ser que meta la pata XD (ahora estoy en windows y no hay ganas de reiniciar XD ).
David Martínez dijo hace 4 años y 48 meses:
Sip, tienes razón. Es el lugar «normal» pero no tiene por que estar ahí. Con tu solución va perfecto ;)
Tuxiradical dijo hace 4 años y 48 meses:
^^ los debianeros, que por naturaleza instalamos las cosas fuera de su lugar XD

Saludos.
jo dijo hace 4 años y 48 meses:
Acabo de jugar un poco con PHP y el Bash des del Terminal de Mac Os X, y bueno es divertido :)

Cualquier día de estos le añado al juego un poco de PHP-GTK
PaToRoCo dijo hace 4 años y 48 meses:
Esto lo había publicao yo hace tiempo, por lo que veo que no me lees :'(
http://www.patoroco.net/2004/07/creando-ejecutable...
Ferdy dijo hace 4 años y 48 meses:
^^ los debianeros, que por naturaleza instalamos las cosas fuera de su lugar XD

Pues serás tu...

Por otro lado, PHP debe estar instalado ahí; si lees el estándar del sistema de ficheros Linux solo me entra en la cabeza que esté en /usr/bin o en /usr/local/bin... cualquier cosa fuera de eso es querer ser incompatible con el mundo.

Salu2.Ferdy
David Martínez dijo hace 4 años y 48 meses:
PaToRoCo, sí te leo pero desde hace poco. Ese post no lo había visto :$
David Martínez dijo hace 3 años y 48 meses:
Otro ejemplo. Este script busca enlaces en una web y descarga los que tengan una determinada extensión. Bueno para bajarse, por ejemplo, todas las imagenes de una web:
#!/usr/bin/php -q
<?php

error_reporting(E_NOTICE);

$extension = ".jpg";
$texto = file_get_contents("http://www.google.com");
$texto = eregi_replace('"<a href="', '"<a href="', $texto);
preg_match_all('!<a href="(.+)"!U',$texto,$enlaces);
foreach($enlaces[1] as $enlace)
if((substr($enlace, -4) == $extension) && ($pos = strrpos($enlace, "/")))
{
$nombre = substr($enlace, $pos + 1, strlen($enlace) - $pos);
printf("Descargando $nombre ... ");
printf(copy($enlace, $nombre) ? "OK\n" : "FALLO\n");
}
?>
Ya sé que esto se puede hacer de mil maneras pero es una de las cosas que se pueden hacer.
PaToRoCo dijo hace 3 años y 48 meses:
Ahora una pregunta, ya que te has metido en el tema... sería posible pasar parámetros cuando se ejecuta el script? yo por ejemplo, como viste, lo hago añadiendo el permiso de ejecución (+x) al archivo, y así lo puedo ejecutar como un programa sin poner php delante (soy mu vago ;)), el caso es que por ejemplo, en tu ultimo ejemplo (valga la repugnancia), si la variable extension se la quieres meter por parámetro, como sería? me refiero a hacer algo similar al archivo.php?extension=jpg, pero por línea de comandos...
Si, lo se, me explico como el culo XD
Un saludo!
David Martínez dijo hace 3 años y 48 meses:
Pues es sencillo: ejecutas ./script.php parametro=valor. Luego recojes el valor con $parametro = $_GET["parametro"]; . Así de simple :)
PaToRoCo dijo hace 3 años y 48 meses:
Pos gracias :P
A ver si apruebo la puta Historia y enredo un poco :D
Toad dijo hace 3 años y 48 meses:
Otro ejemplo. Este script busca enlaces en una web y descarga los que tengan una determinada extensión. Bueno para bajarse, por ejemplo, todas las imagenes de una web:
#!/usr/bin/php -q
<?php

error_reporting(E_NOTICE);

$extension = ".jpg";
$texto = file_get_contents("http://www.google.com");
$texto = eregi_replace('"<a href="', '"<a href="', $texto);
preg_match_all('!<a href="(.+)"!U',$texto,$enlaces);
foreach($enlaces[1] as $enlace)
if((substr($enlace, -4) == $extension) && ($pos = strrpos($enlace, "/")))
{
$nombre = substr($enlace, $pos + 1, strlen($enlace) - $pos);
printf("Descargando $nombre ... ");
printf(copy($enlace, $nombre) ? "OK\n" : "FALLO\n");
}
?>
Ya sé que esto se puede hacer de mil maneras pero es una de las cosas que se pueden hacer.


Ya sé que esto se puede hacer de mil maneras pero es una de las cosas que se pueden hacer.

Muy interesante ese script...

aunque no bajaría los de enlazados por imágenes (aunque todo sería cosa de retocarlo un poco con el <img src=" ;) ) y además los enlaces que no empiecen por <a href=" (por ejemplo <a title="" href=" ) no los cogería...

A mí me gusta mucho esta expresión regular:


$ltrs = '\w';
$gunk = '/#~:.?+=&%@!\-';
$punc = '.:?\-';
$any = "$ltrs$gunk$punc";

preg_match_all("{
\b
http :
[$any] +?


(?=
[$punc] *
[^$any]
|
$
)
}x", $html, $enlaces);


Aunque tampoco es perfecta (los enlaces relativos que no llevan http:// ) pero combinando las dos quedaría perfecto ;)

Por cierto, falta el "<?php", creo que se lo tragó :P :P

Toad dijo hace 3 años y 48 meses:
Ein??

Se me tragó todo el comentario que había escrito! :-( :-(

:-(
David Martínez dijo hace 3 años y 48 meses:
Tranquilo Toad, es un bug. Estoy arreglandolo...
Toad dijo hace 3 años y 48 meses:
Voy a volverlo a intentar:



error_reporting(E_NOTICE);

$extension = ".jpg";
$texto = file_get_contents("http://www.google.com");
$texto = eregi_replace('"<a href="', '"<a href="', $texto);
preg_match_all('!<a href="(.+)"!U',$texto,$enlaces);
foreach($enlaces[1] as $enlace)
if((substr($enlace, -4) == $extension) && ($pos = strrpos($enlace, "/")))
{
$nombre = substr($enlace, $pos + 1, strlen($enlace) - $pos);
printf("Descargando $nombre ... ");
printf(copy($enlace, $nombre) ? "OK\n" : "FALLO\n");
}



Muy interesante ese script :P ... pero por ejemplo, los archivos que estén enlazados por un "img" en vez de un "a" no los pillaría, o los archivos que estén enlazados con "a title='' href='" o algo así...

A mí me gusta mucho esta expresión:

$ltrs = '\w';
$gunk = '/#~:.?+=&%@!\-';
$punc = '.:?\-';
$any = "$ltrs$gunk$punc";

preg_match_all("{
\b
http :
[$any] +?


(?=
[$punc] *
[^$any]
|
$
)
}x", $html, $enlaces);


Encuentra todos los enlaces tipo http:// que haya en $html, aunque tampoco es perfecto (los enlaces relativos), pero combinando las dos sí que quedaría perfecto ;) .

Saludos...
Toad dijo hace 3 años y 48 meses:
Otra vez... :-( :-(

Hay límite de caracteres para poner comentarios?

Saludos...

Haz tu comentario

Nombre Correo electrónico Página web
Acuérdate de mi, por favor

Delirios de un Informático :: Gestionado con Bitacorae :: Alojado en Bitacoras.com :: Licenciado bajo Creative Commons