¿Cómo puedo ejecutar un script PHP soltando el archivo en el icono?

2

Tengo un script php que toma un nombre de archivo como argumento. Cuando lo ejecuto desde una ventana de terminal, escribo

./my_script.php file_to_process.txt

¡Funciona muy bien!

Lo que me gustaría poder hacer es tener un icono en mi dock que cuando suelte un archivo en él, ejecute el script php y proporcione la ruta completa al archivo eliminado como argumento para ese script.

es posible? ¿Puede proporcionar instrucciones paso a paso?

Scott
fuente

Respuestas:

2

Sí, esto debería ser posible usando Automator. No he trabajado con php desde la línea de comandos, así que no estoy seguro de cómo funciona exactamente, pero esta es una instrucción general.

  1. Abra Automator (está en la carpeta Aplicaciones).
  2. Elija crear una aplicación. Seleccione la plantilla de la aplicación
  3. Seleccione Utilidades en Biblioteca, elija Ejecutar script de shell y arrástrelo al área de la derecha. Seleccione Utilidades, Ejecutar script de shell
  4. En el área de texto para la acción de ejecutar el script de shell, elimine 'cat' y escriba la ruta completa al script que desea ejecutar.
  5. Seleccione Pasar entrada a stdin.
  6. Guarde la aplicación en algún lugar y arrástrela a su base.
  7. Pruébelo arrastrando un archivo a él.
Lizzan
fuente
Seguí tus instrucciones. Cuando ejecuto esto dentro del automatizador y agrego una acción de búsqueda a "Obtener elementos de búsqueda especificados" funciona bien. Luego elimino "Obtener elementos del buscador especificados" y lo guardo, luego trato de soltar un archivo y no funciona, ¿alguna idea?
Scott
Resulta que, el paso 5 anterior, debe establecerse en STDIN, y luego debe leerse STDIN. En lugar de ser la secuencia del archivo, STDIN contiene el nombre del archivo que se descartó.
Scott
@ Scott, OK, genial, cambiaré las instrucciones entonces. ¡Me alegro que lo hicieras funcionar!
Lizzan
Aquí, en 2019, al intentar esto con Mojave, me he encontrado con problemas en los que la mitad de los archivos se caen en el disparo automático por segunda vez, y algunos archivos se pierden al soltarlos. Creo que es un error de problema de caché de archivo mojave ... por lo que usar AppleScript con drop parece funcionar de manera más confiable que Automator ahora.
IncredibleHat
1

También puede hacer esto con AppleScript.

El siguiente script abre recursivamente todos los archivos / carpetas que se le han caído. Para cada archivo, ejecute el script PHP definido por phpScriptPath pasando la ruta del archivo como argumento.

Para crear la aplicación:

1. Abra el Editor AppleScript

2. Pegue el siguiente código:

propiedad phpScriptPath: "/ myPHP \ Scripts / my_script.php" - Ruta absoluta a su script PHP

en artículos caídos abiertos
    processItems (dropItems)
final abierto

en processItems (theItems)
    repita con theItem en theItems
        if isDirectory (theItem) entonces
            processItems (theItem)
        más
            hacer shell script phpScriptPath & "" & forma citada de (ruta POSIX de (theItem as alias))
        terminara si
    final repetir
proceso final

- Esta función viene de aquí:
- http://stackoverflow.com/questions/6872007/applescript-how-to-check-if-something-is-a-directory-or-a-file
en isDirectory (someItem) - someItem es una referencia de archivo
    establece filePosixPath en forma citada de (ruta POSIX de (someItem as alias))
    establezca fileType en (hacer el script de shell "file -b" y filePosixPath)
    si fileType termina con "directorio", entonces devuelve verdadero
    falso retorno
final isDirectory

3. Establecer la ruta absoluta del PHPscript

Edite la primera línea de propiedad del script

4. Exportar como aplicación

Menú Archivo> Exportar:

  • Elija el nombre y el destino de la aplicación
  • Seleccione para exportar como aplicación
Bibou
fuente
¿Cómo alteraría esto para simplemente pasar todas las rutas de archivos directamente a php (para que php pueda manejar todo lo esencial)? ¿Sabes, omitir todo el complicado 'directorio de is' y disparar php varias veces para una operación de caída?
IncredibleHat
0

Necesitas usar Automator.app

Cree una aplicación y agregue Utilidades-> Ejecutar script de Shell para incluir su my_script.php

marca
fuente