Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapisanie pliku zamiast wykonania
Forum PHP.pl > Forum > PHP
FireFox
Witam serdecznie

Spotkałem się z bardzo dziwnym zachowaniem skryptu
Zamiast wykonania przegladarka "oferuje" zapisanie pliku. Dzieje sie tak po uruchomieniu pliku php. Skrypt działa i po 10-15 sekundach pojawia sie komunikat, czy chcesz zapisać plik (php). Po potwierdzeniu zapisuje sie na dysku lokalnym plik o rozmiarze 0 bajtow. Plik wykonuje operacje na plikach nie przekraczajacych 20MB. Na poczatku sadzilem ze sytuacja spowodowana jest wydluzonym czasem dzialania skryptu ale po zmianie max_execution_time nic sie nie zmienilo. Chcialem zapytac szanownych forumowiczow czy ktos spotkal sie z podobna sytuacja i jak sobie z nia poradzil. Za wszelkie uwagi bede bardzo wdzieczny.

pozdrawiam wszystkich Fox
john_doe
hmmmm coś mi sie wierzyć nie chce.... rzuć cały kod tego skryptu
FireFox
  1. ini_set ( 'max_execution_time', 0 );
  2.  
  3. // dane konfiguracyjne
  4.  
  5. $dirName = 'PlikiWsadowe/';
  6.  
  7. $dirDone = 'FilesDone/';
  8.  
  9. $dirMovie = 'FilesMovie/';
  10.  
  11. $dirFFMPEG = 'xxxxxxx/ffmpeg ';
  12.  
  13.  
  14.  
  15. // koniec danych configuracyjnych
  16.  
  17. if ( $Handle = opendir( $dirName ) )
  18. {
  19. while ( false !== ( $file = readdir( $Handle ) ) )
  20. {
  21. $FullPath = $dirName . $file;
  22.  
  23. $PathParts = pathinfo( $FullPath );
  24.  
  25. if ( !is_dir( $FullPath ) && $file != 'CVS' && $file != '.' && $file != '..' )
  26. {
  27. $arrFiles[] = trim( $file );
  28. }
  29. }
  30. closedir( $Handle );
  31.  
  32. print 'znalezione pliki';
  33.  
  34. ?><pre><? print_r ( $arrFiles ); ?> </pre> <?
  35.  
  36.  
  37.  
  38. // wykonujemy operacja dla wszystkich plikow z tablicy $arrFiles
  39.  
  40. if ( $arrFiles )
  41. {
  42. // ladowanie bibliotek
  43. $extension = 'ffmpeg.so';
  44. $extension_soname = $extension . '.' . PHP_SHLIB_SUFFIX;
  45. $extension_fullname = PHP_EXTENSION_DIR . '/' . $extension_soname;
  46.  
  47. //echo $extension_fullname;
  48.  
  49. if ( ! extension_loaded( $extension ) )
  50. {
  51. dl( $extension ) or die( 'lib niedostepny: $extension_fullname' );
  52. }
  53.  
  54. foreach ( $arrFiles as $file )
  55. {
  56.  
  57. $strDestinationName = md5( microtime() );
  58.  
  59. //przenosimy plik
  60. if ( is_file ( $dirName . $file ) )
  61. {
  62. $FileSource = $dirName . $file;
  63.  
  64. $strParameters = '-y -ar 22050 -acodec mp3 -ab 32 -f flv -s 330x220';
  65.  
  66. $FileOut = $dirMovie . $strDestinationName . '.flv';
  67.  
  68. $strKomenda = $dirFFMPEG . '-i ' . $FileSource . ' ' . $strParameters . ' ' . $FileOut . '' ;
  69.  
  70. exec( $strKomenda );
  71. }
  72.  
  73. $arrExt = explode ( '.', $file );
  74. $nameFile = $arrExt[0];
  75.  
  76. $objMovie = new ffmpeg_movie( $FileOut );
  77. $Time = floor( $objMovie->getDuration() );
  78.  
  79.  
  80. // czasy klatek do pobrania
  81. $Frame2 = floor ( $Time / 3 ); 
  82. $Frame3 = floor ( $Frame2 * 2 );
  83. $arrFrames = array ( 0, $Frame2, $Frame3 );
  84.  
  85. foreach ( $arrFrames as $key=>$val )
  86. {
  87. $imgName = $dirDone . $strDestinationName . '_' . $key . '.jpg';
  88.  
  89. $strKomenda = $dirFFMPEG . '-i ' . $dirMovie . $strDestinationName . '.flv -s 150x100 -vframes 1 -ss ' . $val . ' -f mjpeg ' . $imgName ;
  90. exec( $strKomenda );
  91. print ( 'Dla pliku <b>' . $file . '</b>(' . $strDestinationName . '.flv) zostala utworzona miniatura o nazwie ' . $imgName . '<br /><br />' );
  92.  
  93. }
  94.  
  95.  
  96. // dopisanie pliku do bazy i pobranie jego ID
  97.  
  98. // koniec dopisania pliku w db
  99.  
  100.  
  101. print ( 'Plik <b>' . $file . '</b> zostal dodany pod nazwa ' . $strDestinationName . '.flv<br>' );
  102.  
  103. // czasy klatek do pobrania
  104. $Frame2 = floor ( $Time / 3 ); 
  105. $Frame3 = floor ( $Frame2 * 2 );
  106. $arrFrames = array ( 0, $Frame2, $Frame3 );
  107.  
  108. foreach ( $arrFrames as $key=>$val )
  109. {
  110. $imgName = $dirDone . $strDestinationName . '_' . $key . '.jpg';
  111.  
  112. $strKomenda = $dirFFMPEG . '-i ' . $dirMovie . $strDestinationName . '.flv -s 150x100 -vframes 1 -ss ' . $val . ' -f mjpeg ' . $imgName ;
  113. exec( $strKomenda );
  114. print ( 'Dla pliku <b>' . $file . '</b>(' . $strDestinationName . '.flv) zostala utworzona miniatura o nazwie ' . $imgName . '<br /><br />' );
  115.  
  116. // dopisanie mini do bazy danych
  117. }
  118. }
  119. }


dla przejrzystosci wyciolem ze skryptu dzialania sql'owe

plik konwertuje filmy (prezentacje w formie filmu avi) do formatu flasha flv.
na poczatku konwertowalem kilka plikow na raz (stad petla na poczatku) pozniej dzialania realizowalem juz tylko na jednym pliku.

dzialanie pliku

pobranie pliku(plikow) z katalogu pliki wsadowe
operacje: konwersja do formatu flv, skalowanie, itp.
zapisanie pliku
utworzenie trzech miniatur z trzech roznych czasow filmu

czesto zdarza sie ze skrypt nie wykonuje sie tylko chce zapisac go w formie pliku php o zerowej pojemnosci

ponizej podaje screenshot


sytuacja jest dla mnie bardzo dziwna
nie wiem jak sobie z tym poradzic
prosze o pomoc

naprawde nikt nie spotkał sie z podobnym problemem?
cicik
Inne skrypty działają dobrze?
Miałem coś takiego jak Apache był źle skonfigurowany.
FireFox
wszystkie inne dzialaja poprawnie, niestety serwer jest wirtualny i nie mam dostepu do ustawien apacha
cicik
Jak mi nie działało to każdy plik *.php się downlodował więc w Twoim przypadku Apache jest OK.
FireFox
powiem Wam wszystkim ze to jakas tragedia jest.
Stracilem juz wszelkie pomysly na temat dlaczego to nie dziala.
Niestety mam dostep tylko do jednego serwera z ffmpeg i nie moge tego przetestowac na innym. Moze ktos z Was bylby na tyle mily i sprawdzil by moje wypociny.
Sznurek juz kupiony
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.