Am I suppose to create a separate .php
file which then runs from the php cli
to execute one of these functions?
Bu muhtemelen ben bunu yapacağını yoludur:
- the PHP webpage adds a record in database to indicate "this file has to be processed"
- ve kullanıcıya bir mesaj görüntüler; "dosya yakında işlenecektir" gibi bir şey
- In CLI, have a batch process the new inserted files
- İlk, "işlem" olarak rekor işaretlemek
- ffmpeg şey
- "işlenmiş" gibi dosyayı işaretleyin
- And, on the webpage, you can show to the user in which state his file is :
- henüz işleme edilmemiş ise
- Bu işleniyor eğer
- veya işlendikten eğer - o zaman yeni video dosyası için ona link verebilir.
İşte diğer düşünceler bir çift:
- The day your application becomes bigger, you can have :
- bir "web sunucusu"
- Birçok "işleme sunucuları"; uygulamanızda, web sayfaları hizmet değil, CPU çok gerektirecektir ffmpeg şey; böylece, o kısmı ölçek edememek güzel (başka bir DB "işlem" olarak belirten, dosyaları "kilitlemek" için var: bu şekilde, aynı dosyayı işlemek için çalışırken birkaç işleme sunucuları olmaz)
- You only use PHP from the web server to generate web pages, which is je job of a web server
- Ağır / Uzun işleme bir web sunucusu iş değil!
- Eğer "işleme" bölümü için PHP daha başka bir şey geçmek isteyeceksiniz gün, daha kolay olacak.
Sizin "işleme script" dakika her çift başlatmak olurdu; Eğer bir Linux gibi makinede eğer, bunun için cron kullanabilirsiniz.
Edit : a bit more informations, after seeing the comment
Işleme kısmı CLI'den yapılır, ve Apache gelen, "arka plan" manipülasyonlar anykind ihtiyacım yok gibi: sadece bütün çıktıya dönecektir ki, shell_exec
a> kullanabilirsiniz yapıyor bitince PHP komut dosyası için bu işi komut bulunuyor.
"Işleme" diyerek web sayfasını izlerken kullanıcı için, arka plan işleme gibi gözükecek; işleme (hatta belki de başka bir makinede) başka processus tarafından yapılacaktır olarak ve, bir bakıma, bu olacak.
Ama, sizin için, o çok daha basit olacak:
- bir web sayfası (hiçbir şey "arka plan")
- ya hiç plan malzeme ile bir CLI komut dosyası.
Sizin işleme komut böyle bir şey gibi görünebilir, sanırım:
// Fetch informations from DB about one file to process
// and mark it as "processing"
// Those would be fetched / determined from the data you just fetched from DB
$in_file = 'in-file.avi';
$out_file = 'out-file.avi';
// Launch the ffmpeg processing command (will probably require more options ^^ )
// The PHP script will wait until it's finished :
// No background work
// No need for any kind of polling
$output = shell_exec('ffmpeg ' . escapeshellarg($in_file) . ' ' . escapeshellarg($out_file));
// File has been processed
// Store the "output name" to DB
// Mark the record in DB as "processed"
Really easier than what you first thought, isn't it ? ;-)
Just don't worry about the background stuff anymore : only thing important is that the processing script is launched regularly, from crontab.
Hope this helps :-)