Beiträge von Tobse

    Das ganze ist in einer ajax upload bar. Der befehl wird in einem string gespeichert und am ende aus debug- gründen nochmals ausgegeben. Das die datei nicht gefunden wurde sehe ich selbst. Aber nach dem upload iat nirgends wo das jpg file sein könnte etwas (also verzeichnis der php, speicherort von ffmpeg usw). Wenn ich aber den befehl, den php gerade ausgeführt hat und NICHT zu einem jpg geführt hat unter gleichen bedingungen (ausführungsverzeichnis, befehl ge "copy&paste"d) mit PuTTY ausführe klappts. Ich schliese daraus weder ein poroblem im copy() noch im echo(). Der code komtmt gleich.

    Ich habs gelöst. Der hacken war, dass nicht php sondern ffmpeg nicht die rechte hatte.
    in /etc/sudoers (per visduo):

    Code
    www-data        ALL=(ALL) NOPASSWD: /usr/bin/ffmpeg

    Es macht keinen unterschied ob mit oder ohne. Es funktioniert beides mal nicht. Der Befehl wird schlicht nicht ausgeführt, bzw. es enteht keine datei, anders alls wenn ich mir den ausgeführten befehl von php geben lasse und ihn im gleichen verzeichniss als root ausführe. Was hat mir das gesagt ? PHP brauch rechte xD Oder liege ich da falsch?

    Zitat von threadi


    b) du wenn Du es bräuchtest scheinbar kein Verständnis für das Rechte-System unter Linux hast


    Wie ich aus Ubuntu weiss, führt sudo einen Befehl als admin aus.
    EDIT:
    das gibt php aus:

    HTML
    <br />
    <b>Warning</b>:  copy(f7e146765fbd38ef89685d21e63a0241_1286908637.jpg) [<a href='function.copy'>function.copy</a>]: failed to open stream: No such file or directory in <b>/var/www/web1/html/v2/html/uploader/convert.php</b> on line <b>45</b><br />
    
    
    ffmpeg -itsoffset 10 -i "/var/www/web1/html/v2/videos/f7e146765fbd38ef89685d21e63a0241_1286908637.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 f7e146765fbd38ef89685d21e63a0241_1286908637.jpg

    Der safe mode ist aus. Nach httpd will ich wegen posting #03-11-2005, 23:28 (das letzte).
    P.S.: Der Bash befehl an HandBrakeCLI wird auch ausgeführt.

    PHP
    chdir("/var/www/web1/html/v2/html/uploader/");
            exec("cd ".dirname(__FILE__));
            $str="HandBrakeCLI -i  \"../../upload_tmp/".$f."\" -o \"../../videos/".$filename.".mp4\" -f mp4 --turbo --ipod-atom --optimize --arate ".$data[0]." -B ".$data[1]." --width ".$data[3]." --rate ".$data[4]." --encoder ".$data[5];
            exec($str);
            $str="sudo ffmpeg -itsoffset 10 -i \"/var/www/web1/html/v2/videos/".$filename.".mp4\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 ".$filename.".jpg";
            exec($str);

    php.ini im anhang

    Öhm, bei mir im FTP fehlt der ordner httpd im /etc verzeichnis.

    Zitat von PuTTY


    root:/etc# cd httpd
    -bash: cd: httpd: No such file or directory


    Aber ich werd dem wwwrun mal noch rechte geben. Was ist mit www-data ?
    Edit:
    Hat nicht geklappt. Meine sudoers sieht so aus:

    web1 ist ist der "Nutzer" der subdomain www.

    Aber es bleibt hoffnungslos.

    Hi,
    ich habe hier einen echt "wiederspenstigen server" :) Ich will per PHP folgenden bash-befehl ausführen:

    PHP
    $str="sudo ffmpeg -itsoffset 10 -i \"/xxx/xxx/xxx/".$filename.".mp4\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 84x46 ".$filename.".jpg";
    // hab das mit/ohne sudo probiert


    Habe also folgendes ausprobiert:
    Bash file per php aufrufen (*.sh)
    Java per php aufrufen, dass den befehl abfeuert
    Java geschrieben, dass den Job erledigt, codecprobleme
    gerade C compiliert und damit den Befehl ausführen wollen (mit/ohne sudo)
    Keine Chance, per php gehts einfach nicht.
    Wenn ich mir aber den befehl nach der mehr oder weniger erfolgreichen ausführung ausgeben lasse und ihn dann in PuTTy eingebe, klappts immer (ausser das java-prog mit den code-probs).
    Da ich mich nicht mit Debain auskenne, schon garnicht mit der Server version bin ich hier schnell mit meinem Latein am ende. Weiss jemand wie ich PHP / Apache die Rechte gebe? Google lässt mich halbschlau.
    Habe daraus auch schon die /etc/sudoers versucht, geht nicht und ist mir pers. zu unsicher.

    P.S.:
    Das PHP Skript sowie die ganzen Executables haben 775 rechte.

    synaptic: Sorry, hast recht.
    @TS:
    Schon fast, du musst eben per JS oder jQuery eine Referenz auf das HTML-Element bekommen, indem die Signatur dann stehen soll. Wenn du die hast, kannst du dort hinein dann mit $.ajax / $().load(url); die signatur reinladen. In meinem Beispiel übergebe ich eine ID (in diesem fall die des posts) sowohl an das HTML-Attribut id eines Div-Elements sowie an JS.

    P.S.: Du könntest auch Per JS durch alle divs (per document.getElementsByTagName();) gehen und alle, deren id (z.B. postXY) entspricht den entsprechenden inhalt verpassen. Kannst du denn den PHP-Code verändern oder nur ein JS einbinden?

    Sicher geht das:
    Rechtsklick -> öffnen mit ... -> programm auswählen -> (dein Audioplayer, z.B. Winamp) -> kästchen "Dateityp immer mit diesem Programm öffnen" anhaken -> öffnen klicken

    Hm... Output buffering FTW xD

    PHP
    <?php
    function load_template($file) {
        @ob_start();
        include($file);
        @$outputs=ob_get_contents();
        @ob_end_clean();
        return $outputs;
    }
    ?>

    Dann sieht ein template evtl so aus:

    per PHP:

    PHP
    echo load_template("template_abc.php");

    P.S.: In einem CMS das bereits output buffering nutzt, klappt das natürlich nicht.


    Soviel zu Templates. Wenn du aber an deiner RegExp festhälst, das müsste klappen:

    PHP
    $m=array();
    preg_match_all("/<!--MENU ([0-9]{1,2})(\-[0-9]{1,2}?)-->/", $template_quelle, $m);
    print_r($m);

    habe mir mal das Addon Live HTTP Headers runtergeladen. Die Cookies sind nicht im header. Nachdem ich dann aber zu den setcookie zeielen ein file_put_contents(); gepakt hatte, hab ich gemerkt, dass die garnicht erst aufgerufen werden. Der Fehler lag dann daran, dass ich den default-part eines Switch statements ganz vorne hatte. Kurze erklärung: Das CMS hat klassen. Im Konstruktor der klasse wird der Login durchgeführt und in der getContents(); Methode ist das besagte switch Statement. Das handelt je nach der Privaten variable error, die beim Login im Konstruktor eben verschiedene werte bekommt.
    Und wieso auch immer hat der PHP-Parser den default-part zuerst geparst und dadurch kamen die teile für die entstandene Fehlermeldung nicht zum zuge. Tatsächlich hab ich einfach das flasche passwort eingegeben, aber habs nicht erfahren xD
    Tschuldigung für den unnötigen Fred. Aber wie so oft findet man die Lösung erst wenn man aufgegeben hat ;)

    Der Ganze code ist in einem "wrapper" von output-buffering drin, aber auch mit nem error_reporting(E_ALL);/iniset(...); bleibt die Seite ohne Fehlermeldung (Das output-buffering habe ich abgeschaltet). Ein cookie kommt garnicht erst an, zumindest wird er nicht im FF Cookie-Fenster angezeigt. Gibts evtl. eine Möglichkeit, sich den Header, der vom Server kommt, anzusehen?

    Hi,
    ich habe da nochmal ein Problem:
    In eine Webseite die ich lokal entwickle soll man sich natürlich einloggen können, das wird durch den cookie "cp_auth" geregelt. Lokal wird der cookie gesetzt und das CMS erkennt den Benutzer als eingeloggt. Aber wenn ich mich auf den Server einloggen will wird dieser Cookie nicht gesetzt. Hat jemand ne idee warum?
    P.S.:

    PHP
    if(isset($_POST['stay'])) {
        setcookie("cp_auth", $res['id']."_".md5($res['password']), time()+360*24*356);
    } else setcookie("cp_auth", $res['id']."_".md5($res['password']));

    OMFG ...
    Du bist schon vernünftig genug zu fragen, wie du deinen Fehler gelöst hast, viele tun das nicht ;), und dann bist du aber zu faul uns den Code zu geben und schreibst anstadtdessen übers Forum und dein PHP-Anfänger Dasein. Ohne den Code kann man dir nicht helfen. Bsp:
    Ich schreibe jetzt ein gedicht, hört sich gut an, aber ich weiss nicht recht was es bedeutet. Jetzt frage ich die leute danach was es bedeutet, erzähle ihnen dass ich Anfänger bin und erwarte Hilfe, aber ohne das Gedicht zu zeigen ....
    Auch wenn das Beispiel blöd ist, ich glaube aber das trifft es. Also nochmal: Deinen CODE!