thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Καλησπέρα έχω αυτό το κωδικά exec('/usr/bin/ffmpeg -i /path/to/video.mp4' 2>&1 , $output); echo var_dump($output); και μου βγάζει output ενα κατεβατό , άλλα εγώ θέλω να εμφανίσω μόνο μια γραμμή αυτό εδω [19]=> string(162) " Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 422x238 [SAR 1:1 DAR 211:119], 512 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)" το [19]=> αλλάζει από βίντεο σε βίντεο ενώ στο string(162) είναι πάντα σταθερό , άρα πως μπορώ να εμφανίσω το string(162) σε κάθε βίντεο αντι για το κατεβατό? Ευχαριστώ
timonkaipumpa3 Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Για να καταλάβεις τι γίνεται, δες τι είναι ένας array στην php και πως κάνεις access τα στοιχεία του. Υπάρχουν 100000 tutorials σχετικά με αυτό... Ποιο πολύ για εργασία μου κάνει πάντως παρά για ό,τι άλλο.
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Για να καταλάβεις τι γίνεται, δες τι είναι ένας array στην php και πως κάνεις access τα στοιχεία του. Υπάρχουν 100000 tutorials σχετικά με αυτό... Ποιο πολύ για εργασία μου κάνει πάντως παρά για ό,τι άλλο. Εργασια? μακαρι αλλα δεν εχω παει σε πανεπιστήμιο ειναι ενα προτζεκτ που φτιαχνω ( με εναν αλλο φιλο ) απλα προσπαθω να προσθεσο διαφορα πραγματακια στο προτζεκτ και να μαθω κατι απο αυτο. εψαξα πολυ και εκανα δοκιμες αλλα δεν καταφερα να το κανω.... τσπ μπορεις να μου δωσεις μια απαντηση? η να περιμενω απο καναν αλλον? Ευχαριστω
mad-proffessor Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Με αυτές τις system calls πάντως πας για χάκεμα(exec, shell_exec κτλ), υπάρχει library wrapper λέγεται ffmpeg-php.
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Με αυτές τις system calls πάντως πας για χάκεμα(exec, shell_exec κτλ), υπάρχει library wrapper λέγεται ffmpeg-php. Χακεμα? Χμμ γιατι? Η σελιδα που εχει αυτο το κώδικα δεν ειναι public και εχω πρόσβαση μονο εγω ....βασικα σε ολο το προτζεκτ εχω πρόσβαση μονο εγω ...υπαρχει πρόβλημα με το κώδικα που εχω? Τσπ σε αυτο που ρώτησα πως μπορεί να γίνει?
mad-proffessor Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Στοιχεία πίνακα κάνεις access με foreach loops ή for loop κ μετα εκτυπώνεις όποιο θες. Αν δε το ανεβάσεις live τότε δεν έχεις πρόβλημα με αυτές τις συναρτήσεις
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Ευχαριστω για την απαντηση σου , ο πινακας δεν ειναι φτιαγμενος απο μένα βγάνει απο το var_dump($output); παιζει ρολο αυτο? η δεν εχει σημασια και μπορω να παρω οτι χρειαζομαι και απο κει? εγω δοκιμασα κατι τέτοιο foreach ($output as $out) ειναι λαθος?
chrism4111 Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Πρώτα πρέπει να κατανοήσεις τι κάνει η Foreach.Ας πούμε οτι έχεις ένα array με 3 εγγραφές (items).Δίνεις στην Foreach ένα array και της λες για κάθε λούπα που θα κάνει να δεσμέυει ένα Item (από το πρώτο σειριακά και για κάθε λούπα το επόμενο) σε μια μεταβλητή.Έτσι αν έχουμε το παρακάτω array: $array = array("mitsos", "giorgos", "mpampis");Αν θές να έχεις πρόσβαση στις τιμές του array με την Foreach είναι πολύ ευκολο:foreach($array as $item){ print_r($item); echo '<br />'; }To output τις παραπάνω foreach είναι :mitsosgiorgos mpampisΤο αντίστοιχο με for είναιfor($i = 0; $i < sizeof($array); $i++){ print_r($array[$i]); echo '<br />';}Άρα αν το array σου είναι σωστό τότε έτσι όπως έχεις γράψει την foreach για κάθε λούπα που κάνει τότε θα δεσμεύει μια εγγραφή του $οutput στο $out και στην επόμενη (λούπα) την επόμενη (εγγραφή) μέχρι να φτάσει στην τελευταία.Μην ακούς τον mad-professor λέει ψέματα. ( δεν θα σε χακάρει κανείς ) 1
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Πρώτα πρέπει να κατανοήσεις τι κάνει η Foreach. Ας πούμε οτι έχεις ένα array με 3 εγγραφές (items). Δίνεις στην Foreach ένα array και της λες για κάθε λούπα που θα κάνει να δεσμέυει ένα Item (από το πρώτο σειριακά και για κάθε λούπα το επόμενο) σε μια μεταβλητή. Έτσι αν έχουμε το παρακάτω array: $array = array("mitsos", "giorgos", "mpampis"); Αν θές να έχεις πρόσβαση στις τιμές του array με την Foreach είναι πολύ ευκολο: foreach($array as $item){ print_r($item); echo '<br />'; } To output τις παραπάνω foreach είναι : mitsos giorgos mpampis Το αντίστοιχο με for είναι for($i = 0; $i < sizeof($array); $i++){ print_r($array[$i]); echo '<br />'; } Άρα αν το array σου είναι σωστό τότε έτσι όπως έχεις γράψει την foreach για κάθε λούπα που κάνει τότε θα δεσμεύει μια εγγραφή του $οutput στο $out και στην επόμενη (λούπα) την επόμενη (εγγραφή) μέχρι να φτάσει στην τελευταία. Μην ακούς τον mad-professor λέει ψέματα. ( δεν θα σε χακάρει κανείς ) Σε ευχαριστω για την απαντηση το θεμα ειναι οπως το γραφεις ειναι πολύ κατανοητό και το ειδα πολλες φορε οσο ψαχνομαι και το εχω και στο προτζεκτ μεσα για της κατηγορίες το θεμα ειναι οτι δεν φτιάχνω εγω τον πινακα και οπως ειναι με μπερδεύει αρκετα. Το δικο μου output ειναι αυτο array(25) { [0]=> string(77) "ffmpeg version N-60572-gccc48b3 Copyright (c) 2000-2014 the FFmpeg developers" [1]=> string(79) " built on Feb 19 2014 19:05:59 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)" [2]=> string(259) " configuration: --prefix=/usr/local --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libx264 --enable-libxvid" [3]=> string(40) " libavutil 52. 63.101 / 52. 63.101" [4]=> string(40) " libavcodec 55. 52.101 / 55. 52.101" [5]=> string(40) " libavformat 55. 32.100 / 55. 32.100" [6]=> string(40) " libavdevice 55. 9.100 / 55. 9.100" [7]=> string(40) " libavfilter 4. 1.102 / 4. 1.102" [8]=> string(40) " libswscale 2. 5.101 / 2. 5.101" [9]=> string(40) " libswresample 0. 17.104 / 0. 17.104" [10]=> string(40) " libpostproc 52. 3.100 / 52. 3.100" [11]=> string(95) "Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'path/18087.mp4':" [12]=> string(11) " Metadata:" [13]=> string(26) " major_brand : isom" [14]=> string(25) " minor_version : 512" [15]=> string(39) " compatible_brands: isomiso2avc1mp41" [16]=> string(35) " encoder : Lavf55.32.100" [17]=> string(59) " Duration: 00:05:00.03, start: 0.000000, bitrate: 554 kb/s" [18]=> string(162) " Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 422x238 [SAR 1:1 DAR 211:119], 472 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)" [19]=> string(13) " Metadata:" [20]=> string(36) " handler_name : VideoHandler" [21]=> string(95) " Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 75 kb/s (default)" [22]=> string(13) " Metadata:" [23]=> string(36) " handler_name : SoundHandler" [24]=> string(42) "At least one output file must be specified" } και θελω να παρω τι γραμμη [19]=> string(162) " Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 422x238 [SAR 1:1 DAR 211:119], 512 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)" οπου το [19]=> δεν ειναι σταθερο και αλλαζει απο βιντεο σε βιντεο και μονο το string(162) ειναι σταθερο. Ευχαριστω για την απαντηση
geomagas Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Με αυτές τις system calls πάντως πας για χάκεμα(exec, shell_exec κτλ)... Θα ήταν χρήσιμο να επεκταθείς λίγο πάνω σ' αυτό (μην τρομάξουν κι άλλοι...) Καλησπέρα έχω αυτό το κωδικά exec('/usr/bin/ffmpeg -i /path/to/video.mp4' 2>&1 , $output); echo var_dump($output); και μου βγάζει output ενα κατεβατό , άλλα εγώ θέλω να εμφανίσω μόνο μια γραμμή αυτό εδω [19]=> string(162) " Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 422x238 [SAR 1:1 DAR 211:119], 512 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)" το [19]=> αλλάζει από βίντεο σε βίντεο ενώ στο string(162) είναι πάντα σταθερό , άρα πως μπορώ να εμφανίσω το string(162) σε κάθε βίντεο αντι για το κατεβατό? Ευχαριστώ Η exec() σου τοποθετεί την έξοδο της εκτέλεσης του προγράμματος στη μεταβλητή $output σαν ένα php array όπου κάθε στοιχείο του είναι κι από μία γραμμή. Πρώτα θα πρέπει να αποφασίσεις το pattern που θέλεις να αναγνωρίσεις, και μετά να φιλτράρεις τα στοιχεία του πίνακα ως προς αυτό. Για παράδειγμα, έστω ότι θέλεις να αναγνωρίσεις γραμμές του στυλ: μπλαμπλαStream #μπλαμπλα Το regex για κάτι τέτοιο θα ήταν: /.*Stream #.*/ Άρα: $filtered=array_filter( $output, function($element) { return preg_match('/.*Stream #.*/',$element); } ); var_dump($filtered); ...ή κάπως έτσι. 1
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Θα ήταν χρήσιμο να επεκταθείς λίγο πάνω σ' αυτό (μην τρομάξουν κι άλλοι...) Η exec() σου τοποθετεί την έξοδο της εκτέλεσης του προγράμματος στη μεταβλητή $output σαν ένα php array όπου κάθε στοιχείο του είναι κι από μία γραμμή. Πρώτα θα πρέπει να αποφασίσεις το pattern που θέλεις να αναγνωρίσεις, και μετά να φιλτράρεις τα στοιχεία του πίνακα ως προς αυτό. Για παράδειγμα, έστω ότι θέλεις να αναγνωρίσεις γραμμές του στυλ: μπλαμπλαStream #μπλαμπλα Το regex για κάτι τέτοιο θα ήταν: /.*Stream #.*/ Άρα: $filtered=array_filter( $output, function($element) { return preg_match('/.*Stream #.*/',$element); } ); var_dump($filtered); ...ή κάπως έτσι. Σας ευχαριστω ολους για της απαντησης αλλα του φιλου geomagas ηταν αυτο που εψαχνα ..... επειδή ειμαι και πολυ τσακάλι άλλαξα το var_dump($filtered); με echo implode($filtered); και το διχνει σαν τεχτ οπως το ηθελα :D Σας ευχαριστώ
chrism4111 Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Σορρυ δεν κατάλαβα οτι σου αλλάζει το σειρά των fieldsΝομίζω και εγώ οτι το Φιλλτρο που σου έγραψε ο geo είναι η καλύτερη επιλογή.Αν η γραμμή είναι πάντα στο 19 τότε την παίρνεις πολύ εύκολα.echo $output[19];το string(162) είναι η πληροφορία για το από πόσους χαρακτήρες αποτελείτε το συγγεκριμένο item του πίνακα σου..Δοκίμασε να δεις τον πίνακα σου με print_r($output);
thiva7 Δημοσ. 21 Σεπτεμβρίου 2014 Μέλος Δημοσ. 21 Σεπτεμβρίου 2014 Αν η γραμμή είναι πάντα στο 19 τότε την παίρνεις πολύ εύκολα. echo $output[19]; το string(162) είναι η πληροφορία για το από πόσους χαρακτήρες αποτελείτε το συγγεκριμένο item του πίνακα σου.. Δοκίμασε να δεις τον πίνακα σου με print_r($output); Ναι απλα το 19 δεν ειναι σταθερο H πληροφορία που θέλω δεν ειναι πάντα στην ιδια γραμμη και αλλαζει
mad-proffessor Δημοσ. 21 Σεπτεμβρίου 2014 Δημοσ. 21 Σεπτεμβρίου 2014 Θα ήταν χρήσιμο να επεκταθείς λίγο πάνω σ' αυτό (μην τρομάξουν κι άλλοι...) Απλα με αυτες τις συναρτησεις επιτρεπεις σε καποιον να κανει unix code injection, να εκτελεσει οτι εντολη θελει στο server αν δε κανεις σωστο escape το output. Π.χ μπορει να δει να εκτελειται κανα passwd ή κανα chown και να αναρωτιεται τι έγινε κ δε μπορει να μπει στο σαιτ. Κάποια λίνκς που μπορούν να βοηθήσουν: http://stackoverflow.com/questions/5631600/executing-unix-shell-commands-using-php http://stackoverflow.com/questions/3115559/exploitable-php-functions http://security.stackexchange.com/questions/1382/disable-insecure-dangerous-php-functions 1
geomagas Δημοσ. 22 Σεπτεμβρίου 2014 Δημοσ. 22 Σεπτεμβρίου 2014 Ντάξει, πέρα από τη γενικότητα κι από τα fancy SO links για το "wow", πως θα μπορούσε κάποιος να κάνει "unix code injection" με τον συγκεκριμένο κώδικα; BTW, στο ...output θα κάνεις το escape;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα