Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Esecuzione di più script php in contemporanea.

    Buongiorno a tutti,
    il mio problema è il seguente:

    Eseguo uno script php che dopo aver uploadato un file esegue un programma da shell (funzione exec di php) che lo converte, la conversione in questione puo durare parecchio (anche varie ore) durante le quali non è possibile continuare ad utilizzare il sito.
    Vorrei che invece nonostante questo script sia in esecuzione fosse possibile continuare a navigare nel sito, c'è qualche funzione che nn conosco che potrebbe venirmi in aiuto a questo scopo?

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    da quanto mi pare di capire non sarà il sito a non essere più navigabile, il punto è che la finestra del browser deve rimanere aperta finchè la procedura non termina per avere un responso.

    Una soluzione sarebbe effettuare la conversione di questi files non in realtime, ma lanciando delle procedure asincrone successivamente, con crontab se è disponibile o con delle richieste asincrone, magari sfruttando gli accessi sulla parte pubblica.

    Quindi quando l'utente effettuerà l'upload del file gli potrai far visualizzare un messaggio dicendo di ripassare tra qualche ora.

    Ciao

  3. #3
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    @razorbalde: In realtà dodox ha ragione in quanto il comando exec è loccante ed attende il termine del processo prima di rilasciare il controllo allo script PHP. Questo di default.

    La documentazione che sempre consiglio di leggere spiega come ovviare al problema:

    http://uk.php.net/manual/en/function.exec.php

    In ogni caso exec è il modo meno sicuro possibile per gestire questo genere di cose. Capire esattamente che cosa fa questo post elaborazione dei dati può aiutare a darti una soluzione più idonea e specifica

  4. #4
    Ecco grazie debo, era questo che volevo capire...
    ho letto la pagina che hai linkato del manuale però non mi è sembrato molto chiaro: 'the output of the program must be redirected to a file or another output stream'???
    che cosa dovrei fare effettivamente?
    inoltre visto che dici che exec non è il modo migliore per effettuare questo tipo di operazioni, qual'è la funzione migliore da utilizzare?

    il mio script fa semplicemente questo:
    caricato un file video lo converte in formato ogg richiamando tramite linea di comando ffmpeg.

    Grazie ancora

  5. #5
    Io non ci ho mai provato e non so se funziona in quanto ajax l'ho sempre utilizzato per lanciare un solo script e lavorare con altro (su lato client) mentre si è in attesa del risultato,ma potresti fare una prova in ajax,ossia,lanciare due script sullo stesso server magari organizzando i 2 script in maniera che si possa gestire il multithreading anche se in php non esiste esplicitamente il multithreading come esiste per esempio in java,altrimenti devi passare in java (che gestisce per l'appunto il multithreading).

  6. #6
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Originariamente inviato da dodox1987
    Ecco grazie debo, era questo che volevo capire...
    ho letto la pagina che hai linkato del manuale però non mi è sembrato molto chiaro: 'the output of the program must be redirected to a file or another output stream'???
    che cosa dovrei fare effettivamente?
    inoltre visto che dici che exec non è il modo migliore per effettuare questo tipo di operazioni, qual'è la funzione migliore da utilizzare?

    il mio script fa semplicemente questo:
    caricato un file video lo converte in formato ogg richiamando tramite linea di comando ffmpeg.

    Grazie ancora
    Basandoti sulla documentazione potresti fare qualcosa del genere:
    http://uk.php.net/manual/en/function.exec.php#107456

    Il metodo ideale sarebbe usare un job server tipo gearman ma dipende dal controllo che hai sul tuo server.

  7. #7
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Originariamente inviato da Giuliotresauri
    Io non ci ho mai provato e non so se funziona in quanto ajax l'ho sempre utilizzato per lanciare un solo script e lavorare con altro (su lato client) mentre si è in attesa del risultato,ma potresti fare una prova in ajax,ossia,lanciare due script sullo stesso server magari organizzando i 2 script in maniera che si possa gestire il multithreading anche se in php non esiste esplicitamente il multithreading come esiste per esempio in java,altrimenti devi passare in java (che gestisce per l'appunto il multithreading).
    Ajax non è comunque una soluzione adatta in quanto aggiunge comportamento asincrono si ma non ti da controllo su quello che sta succedendo alle spalle.

    Una sorta di multithreading può essere simulato con delle chiamate cURL ma è comunque un accrocchio.

    L'utilizzo di job servers è sempre la soluzione più idonea.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.