Keine Rückmeldung bei exec

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Keine Rückmeldung bei exec

    Hallo Leute,

    ich verwende die exec-funktion um ffmpeg auszuführen. Leider landet die Rückmeldung nicht im angegebenen Array, sondern im Apache-error_log. Mit "ls" funktioniert es aber.

    Was mache ich falsch?

    gruss heiko

  • #2
    du suchst nich im forum und bei google nach "ffmpeg" und "exec".

    Kommentar


    • #3
      Doch

      Ich habe nicht nur dieses Forum, sondern das ganze Internet durchsucht, aber alles was ich gefunden habe hat mich nicht weiter gebracht. Die exec-funktion schreibt die ffmpeg-Rückmeldung ins error_log und ich bekomme nichts zurück. Video konvertieren geht, aber ohne Meldung ans Skript.
      Ich brauche aber Infos über den Film, damit ich entscheiden kann wie ich ihn konvertieren will. Z.B. wäre es mir sehr wichtig das Seitenverhältnis zu erhalten wenn ich die Auflösung reduziere.

      Mir hilft der Hinweiss, dass es irgendwo Antworten gibt nicht so richtig weiter. Es kann ja immerhin sein, dass ich Suchbegriffe benutze die in den entsprechenden Beiträgen nicht verwendet werden. Und "ffmpeg" und "exec" liefern mir keine hilfreichen Beiträge - für meinen Fall.

      Ist dieses Zurechtweisen eigentlich ein typisch deutsches Problem, oder handhabt man diesen unfreundlichen Ton auch anderswo auf diesem Planeten?

      heiko

      Kommentar


      • #4
        Ist dieses Zurechtweisen eigentlich ein typisch deutsches Problem
        ja
        oder handhabt man diesen unfreundlichen Ton auch anderswo auf diesem Planeten?
        ja
        Was mache ich falsch?
        ungenaue fehlerbeschreibung.
        Ich brauche aber Infos über den Film
        ggf. header-daten des films auslesen, falls vorhanden.

        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          hilfreicheres als alte beiträge findest du nicht. jedes system ist anders konfiguriert, daher gibt es keine pauschale lösung. in den alten beiträgen findest du aber genügend hinweise, was man alles berücksichtigen sollte. oder glaubst du wirklich, dass dein problem einzigartig ist?

          - rechte
          - error_reporting
          - andere exec funktionen
          etc.

          Kommentar


          • #6
            Nein, ich glaube nur langsam, dass in vielen Foren Klugscheisser rumtrollen, die hinter ihren arroganten Zurechtweisungen nur ihr Unwissen verstecken wollen.

            Die Fehlerbeschreibung ist absolut eindeutig: Die exec-Funktion schreibt die Rückmeldung in den error_log. Was soll man denn dazu noch mehr schreiben?

            Von Experten erwarte ich, dass die die Erkenntnisse aus anderen Threads in kurzen Worten zusammenfassen und dann auf die ausführlichen Beschimpfungen in diesen Threads hinweisen, damit diejenigen die das interessiert, das lesen können. Die meisten Threads sind derart lang und wirr, dass es einfach sinnvoll ist, wenn man das mal zusammenfasst.

            Mich wundert auch, dass niemand auf die Idee kommt den Mechanismuss zu erklären, der entscheidet ob eine Rückmeldung in das angegebene Array oder ins error_log geschrieben wird. Wenn Experten solches Wissen vermitteln, dann sind sie wirklich hilfreich.

            Wenn Ihr mir mal auf der Strasse begegnet und nach dem Weg fragt, werde ich Euch empfehelen, das Ihr Euch nen Stadtplan kauft, denn da steht alles drin was man über die Topographie einer Stadt wissen muss.

            Viel Spaß noch beim Klugscheissen.

            Heiko

            Kommentar


            • #7
              Hallo lieber Heiko!

              Dann werde ich auch mal ein bisschen klugscheißen. Als erstes ist zu sagen, dass dein Stadtplavergleich irgendwie nicht ganz korrekt ist, da ein Stadtplan Geld kostet und nicht überall erhältlich ist. Da du aber ohnehin im Internet bist um in diesem Forum zu schreiben hast du die Kosten für das Internet ohnehin getätigt, und kannst kostenlos bei Google oder einer anderen Suchmaschine deiner Wahl suchen.

              Wenn die Leute mit den Sternchen unter dem Nick (nennen wir Sie wie von dir vorgemacht "Experten"), sagen das man nur richtig suchen muss, dann stimmt das auch.

              Des Weiteren wäre vielleicht ein bisschen Code von dir ganz hilfreich, damit man sehen kann ob und wie man dir vielleicht direkt helfen könnte.
              Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

              Kommentar


              • #8
                Auszug aus den PHP5 sourcen.
                Benutzt du php5? Das wäre btw. eine wichtige information um den fehler
                einzugrenzen auch die ffmpegversion ist u.U. wichtig weil wir es hier mit
                zwei zu untersuchenden potentiellen fehlerquellen zu tun haben.
                Die zeilen die ins error-log geschrieben werden sind auch wichtig.
                Alles in allem ist deine fehlerbeschreibung eben nicht ausreichend.
                Code:
                 60 int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_DC)
                 61 {
                 62         FILE *fp;
                 63         char *buf;
                 64         int l, pclose_return;
                 65         char *cmd_p, *b, *d=NULL;
                 66         php_stream *stream;
                 67         size_t buflen, bufl = 0;
                 68 #if PHP_SIGCHILD
                 69         void (*sig_handler)() = NULL;
                 70 #endif
                 71 
                 72         cmd_p = cmd;
                 73 
                 74 #if PHP_SIGCHILD
                 75         sig_handler = signal (SIGCHLD, SIG_DFL);
                 76 #endif
                 77 
                 78 #ifdef PHP_WIN32
                 79         fp = VCWD_POPEN(cmd_p, "rb");
                 80 #else
                 81         fp = VCWD_POPEN(cmd_p, "r");
                 82 #endif
                 83         if (!fp) {
                 84                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to fork [%s]", cmd);
                 85                 goto err;
                 86         }
                 87 
                 88         stream = php_stream_fopen_from_pipe(fp, "rb");
                 89 
                 90         buf = (char *) emalloc(EXEC_INPUT_BUF);
                 91         buflen = EXEC_INPUT_BUF;
                 92 
                 93         if (type != 3) {
                 94                 b = buf;
                 95                 
                 96                 while (php_stream_get_line(stream, ZSTR(b), EXEC_INPUT_BUF, &bufl)) {
                 97                         /* no new line found, let's read some more */
                 98                         if (b[bufl - 1] != '\n' && !php_stream_eof(stream)) {
                 99                                 if (buflen < (bufl + (b - buf) + EXEC_INPUT_BUF)) {
                100                                         bufl += b - buf;
                101                                         buflen = bufl + EXEC_INPUT_BUF;
                102                                         buf = erealloc(buf, buflen);
                103                                         b = buf + bufl;
                104                                 } else {
                105                                         b += bufl;
                106                                 }
                107                                 continue;
                108                         } else if (b != buf) {
                109                                 bufl += b - buf;
                110                         }
                111 
                112                         if (type == 1) {
                113                                 PHPWRITE(buf, bufl);
                114                                 sapi_flush(TSRMLS_C);
                115                         } else if (type == 2) {
                116                                 /* strip trailing whitespaces */        
                117                                 l = bufl;
                118                                 while (l-- && isspace(((unsigned char *)buf)[l]));
                119                                 if (l != (bufl - 1)) {
                120                                         bufl = l + 1;
                121                                         buf[bufl] = '\0';
                122                                 }
                123                                 add_next_index_stringl(array, buf, bufl, 1);
                124                         }
                125                         b = buf;
                126                 }
                127                 if (bufl) {
                128                         /* strip trailing whitespaces if we have not done so already */ 
                129                         if (type != 2) {
                130                                 l = bufl;
                131                                 while (l-- && isspace(((unsigned char *)buf)[l]));
                132                                 if (l != (bufl - 1)) {
                133                                         bufl = l + 1;
                134                                         buf[bufl] = '\0';
                135                                 }
                136                         }
                137 
                138                         /* Return last line from the shell command */
                139                         RETVAL_STRINGL(buf, bufl, 1);
                140                 } else { /* should return NULL, but for BC we return "" */
                141                         RETVAL_EMPTY_STRING();
                142                 }
                143         } else {
                144                 while((bufl = php_stream_read(stream, buf, EXEC_INPUT_BUF)) > 0) {
                145                         PHPWRITE(buf, bufl);
                146                 }
                147         }
                148 
                149         pclose_return = php_stream_close(stream); 
                150         efree(buf);
                151 
                152 done:
                153 #if PHP_SIGCHILD
                154         if (sig_handler) {
                155                 signal(SIGCHLD, sig_handler);
                156         }
                157 #endif
                158         if (d) {
                159                 efree(d);
                160         }
                161         return pclose_return;
                162 err:
                163         pclose_return = -1;
                164         goto done;
                165 }
                Zeile 84 ist die einzige in der ins errorlog geschrieben wird.
                Das passiert genau dann wenn keine pipe zum aufgerufenden program
                geöffnet werden kann. Ich vermute dass das bei dir der fall ist.
                In diesem fall, wie schon hier vorgeschlagen, pfad prüfen, rechte prüfen usw.

                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  Gaanz einfach

                  Ich habe das gemacht, was in der php-Doku steht:

                  <?php
                  exec("/pfad/zu/ffmpeg/ffmepg -i film.avi -f mov -vcodec mpeg4 -s 160x120 -r 12 film.mov" , $meldung);

                  foreach($meldung as $value) {
                  echo "$value<br>\n";
                  }
                  ?>

                  Das sorgt dafür, dass ffmpeg den film brav konvertiert - ohne eigene Fehlermeldung. Wenn ich etwas neues ausprobiere fange ich ganze einfach an und benutze die Dokumentation.

                  Im errror_log steht genau das was ffmpeg auch über einen Aufruf in der Konsole ausgibt. Da ich gerade an nem anderen Rechner sitze, kann ich es hier nicht per C&P rein setzen, aber ich habe es schon mehrfach überprüft.

                  Als es nicht funktionierte, habe ich es mit ls probiert und das lieferte das Dateilisting. Die php-Dokumentation liefert für mich keinen Hinweis auf unterschiedliche Behandlung von Rückmeldungen.

                  Heiko
                  Zuletzt geändert von heiend; 17.01.2007, 08:22.

                  Kommentar

                  Lädt...
                  X