Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: FIFO oraz PHP
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Siedze od wczoraj nad zdawało by się prostym killkulinijkowym kodem mającym za zadanie kontrolować mplayera.

  1. <?php
  2. //Mplayera odpalamy tak:
  3. //mplayer -ao alsa -quiet -slave -input file=/root/mplayerCtrl /tmp/plik.mp3 >/root/mplayerOut
  4.  
  5. $ctrlF = '/root/mplayerCtrl'; //Fifo
  6. $outF = '/root/mplayerOut'; //Zwykly plik
  7.  
  8. $cfp = fopen($ctrlF, "w");
  9. fclose(fopen($outF, "w+")); //Czyscimy z poprzednich smieci outfile
  10. fwrite($cfp, $argv[1]."\n");
  11.  
  12. while(empty($r))$r=file_get_contents($outF); //Mplayer zwraca z opznieniem totez czasmi trzba zaczekac
  13. echo $r."\n";
  14. ?>


I skrypt niestety nie działa - zawiesza się zazwyczaj przy fwrite. Jedyne co udało mi się zmusić do działania to poniższy kod:

  1. <?
  2. $ctrlF = '/root/mplayerCtrl';
  3. $outF = '/root/mplayerOut';
  4.  
  5. $mpst=shell_exec('ps u -C "mplayer" | grep "mplayer"'); if(empty($mpst))die;
  6. echo "Clean out file\n";
  7. fclose(fopen($outF, "w+")); //Open, erase, close
  8. echo "Send cmd '".$argv[1]."'\n";
  9. shell_exec("echo ".$argv[1]." > $ctrlF");
  10. echo "Read response\n";
  11. while(empty($r))$r=file_get_contents($outF);
  12. echo $r."\n";
  13. echo "Done\n\n";
  14. ?>

Ale chyba każdy widzi, że jest ekhem ... do kitu smile.gif Chcę to zrobić za pomocą php - bez execów.
Fifi209
Mam pytanie, piszesz że zawiesza się na fwrite - jestem ślepy ale go nie widzę.
kiler129
Cytat(fifi209 @ 2.12.2010, 12:50:29 ) *
Mam pytanie, piszesz że zawiesza się na fwrite - jestem ślepy ale go nie widzę.


Powinno być po fclose smile.gif
Skasowałem niechcący. Poprawione.
Fifi209
A jak odpalasz sam plik php i przekazujesz do niego argumenty?

Najpierw czyścisz plik mplayerOut a potem starasz się go czytać, co ile mplayer zwraca coś do tego pliku? Może masz timeout?
kiler129
Odpalam go normlanie z konsolki: php test1.php get_file_name smile.gif
Czyszcze plik mplayerOut ponieważ na starcie mplayer wrzuca tam śmieci dotyczące m.in. niezalezienia ekranu do video czy braku LIRC (szybciej przed każdą komendą czyścić niż sprawdzać czy to pierwsza komenda czy kolejna).
Mplayer zwraca po ok. 30-40ms ale z tym jest różnie - zależy od komendy,
Quadina
Jak dla mnie fwrite wisi, bo plik do którego chcesz pisać jest zablokowany. Spróbuj użyć odpowiednio flock();
http://pl2.php.net/manual/pl/function.flock.php
kiler129
Faktycznie wynikło to z blokady pliku ... taka głupota, aż wstyd smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.