Προς το περιεχόμενο

php array


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα

 

έχω αυτό το κωδικά

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) σε κάθε βίντεο αντι για το κατεβατό?

 

 

Ευχαριστώ

Δημοσ.

Για να καταλάβεις τι γίνεται, δες τι είναι ένας array στην php και πως κάνεις access τα στοιχεία του. Υπάρχουν 100000 tutorials σχετικά με αυτό... 

 

 

Ποιο πολύ για εργασία μου κάνει πάντως παρά για ό,τι άλλο. 

Δημοσ.

Για να καταλάβεις τι γίνεται, δες τι είναι ένας array στην php και πως κάνεις access τα στοιχεία του. Υπάρχουν 100000 tutorials σχετικά με αυτό... 

 

 

Ποιο πολύ για εργασία μου κάνει πάντως παρά για ό,τι άλλο. 

Εργασια? μακαρι αλλα δεν εχω παει σε πανεπιστήμιο :)

 

ειναι ενα προτζεκτ που φτιαχνω ( με εναν αλλο φιλο  )

 

απλα προσπαθω να προσθεσο διαφορα πραγματακια στο προτζεκτ και να μαθω κατι απο αυτο.

 

εψαξα πολυ και εκανα δοκιμες αλλα δεν καταφερα να το κανω....

 

τσπ μπορεις να μου δωσεις μια απαντηση? η να περιμενω απο καναν αλλον?

 

Ευχαριστω

Δημοσ.

Με αυτές τις system calls πάντως πας για χάκεμα(exec, shell_exec κτλ), υπάρχει library wrapper λέγεται ffmpeg-php.

Χακεμα? Χμμ γιατι? Η σελιδα που εχει αυτο το κώδικα δεν ειναι public και εχω πρόσβαση μονο εγω ....βασικα σε ολο το προτζεκτ εχω πρόσβαση μονο εγω ...υπαρχει πρόβλημα με το κώδικα που εχω?

 

Τσπ σε αυτο που ρώτησα πως μπορεί να γίνει?

Δημοσ.

Στοιχεία πίνακα κάνεις access με foreach loops ή for loop κ μετα εκτυπώνεις όποιο θες. Αν δε το ανεβάσεις live τότε δεν έχεις πρόβλημα με αυτές τις συναρτήσεις

Δημοσ.

Ευχαριστω για την απαντηση σου ,

 

ο πινακας δεν ειναι φτιαγμενος απο μένα βγάνει απο το var_dump($output); παιζει ρολο αυτο? η δεν εχει σημασια και μπορω να παρω οτι χρειαζομαι και απο κει?

 

εγω δοκιμασα κατι τέτοιο

 

foreach ($output as $out)

 

ειναι λαθος?

Δημοσ.

Πρώτα πρέπει να κατανοήσεις τι κάνει η 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 λέει ψέματα. :) ( δεν θα σε χακάρει κανείς :P )

  • Like 1
Δημοσ.

Πρώτα πρέπει να κατανοήσεις τι κάνει η 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 λέει ψέματα. :) ( δεν θα σε χακάρει κανείς :P )

Σε ευχαριστω για την απαντηση :)

 

το θεμα ειναι οπως το γραφεις ειναι πολύ κατανοητό και το ειδα πολλες φορε οσο ψαχνομαι και το εχω και στο προτζεκτ μεσα για της κατηγορίες :)

 

το θεμα ειναι οτι δεν φτιάχνω εγω τον πινακα και οπως ειναι με μπερδεύει αρκετα.

 

Το δικο μου 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) ειναι σταθερο.

 

Ευχαριστω για την απαντηση

Δημοσ.

Με αυτές τις 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);

...ή κάπως έτσι.

  • Like 1
Δημοσ.

Θα ήταν χρήσιμο να επεκταθείς λίγο πάνω σ' αυτό (μην τρομάξουν κι άλλοι...)

 

 

Η 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 :D

 

Σας ευχαριστώ :)

Δημοσ.

Σορρυ δεν κατάλαβα οτι σου αλλάζει το σειρά των fields

Νομίζω και εγώ οτι το Φιλλτρο που σου έγραψε ο geo είναι η καλύτερη επιλογή.
Αν η γραμμή είναι πάντα στο 19 τότε την παίρνεις πολύ εύκολα.

echo $output[19];

το string(162) είναι η πληροφορία για το από πόσους χαρακτήρες αποτελείτε το συγγεκριμένο item του πίνακα σου..

Δοκίμασε να δεις τον πίνακα σου με print_r($output);

 

Δημοσ.

Αν η γραμμή είναι πάντα στο 19 τότε την παίρνεις πολύ εύκολα.

 

echo $output[19];

 

το string(162) είναι η πληροφορία για το από πόσους χαρακτήρες αποτελείτε το συγγεκριμένο item του πίνακα σου..

 

Δοκίμασε να δεις τον πίνακα σου με print_r($output);

 

 

Ναι απλα το 19 δεν ειναι σταθερο :(

 

H πληροφορία που θέλω δεν ειναι πάντα στην ιδια γραμμη και αλλαζει

Δημοσ.

Θα ήταν χρήσιμο να επεκταθείς λίγο πάνω σ' αυτό (μην τρομάξουν κι άλλοι...)

 

Απλα με αυτες τις συναρτησεις επιτρεπεις σε καποιον  να κανει 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

  • Like 1
Δημοσ.

Ντάξει, πέρα από τη γενικότητα κι από τα fancy SO links για το "wow", πως θα μπορούσε κάποιος να κάνει "unix code injection" με τον συγκεκριμένο κώδικα;

 

BTW, στο ...output θα κάνεις το escape;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...