Php exec, πως θα περάσω παραμέτρους;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από Knorcedger » 07 Ιαν 2008 22:13

Θέλω ένα αρχείο php να εκτελεί ένα άλλο, χωρίς όμως την χρήση του include. Βρήκα την exec που μπορεί να κάνει κάτι τέτοιο, αλλά δεν μπορώ να περάσω παραμέτρους στο αρχείο που θέλω να εκτελεστεί.

Αν γράψω
exec('php test.php');
το test.php εκτελείται, αλλά αν γράψω
exec('php rank.php?url=http://test.gr');
δεν εκτελείται.

Πως μπορώ να περάσω τις παραμέτρους στο αρχείο που θέλω να εκτελεστεί;

Ευχαριστώ
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 07 Ιαν 2008 23:17

Με την exec() τρέχεις το script σαν CLI. Δεν ισχύουν τα δεδομένα του web με τα URLs.
Μήπως πρέπει να το τρέξεις με την require() ή την include() ;

Πάντως αν επιμένεις στο exec() πρέπει το URL να έχει μορφή παραμέτρου, και το αποτέλεσμα πρέπει να μπει με εξωτερική μεταβλητή. Δηλαδή το σωστό θα ήταν

Κώδικας: Επιλογή όλων

$result = '';
exec('php -f rank.php -- ' . escapeshellarg('url=http://test.gr'), $result);
Και το $result έρχεται σε μορφή array.

Από την πλευρά του rank.php για να μετατρέψεις την παράμετρο στην μορφή που θα είχε το $_GET θα πρέπει να γράψεις

Κώδικας: Επιλογή όλων

parse_str($argv[1], $_GET);
echo $_GET['url']; // bgazei: http://test.gr

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από fafos » 08 Ιαν 2008 00:58

Knorcedger έγραψε:Θέλω ένα αρχείο php να εκτελεί ένα άλλο, χωρίς όμως την χρήση του include. Βρήκα την exec που μπορεί να κάνει κάτι τέτοιο, αλλά δεν μπορώ να περάσω παραμέτρους στο αρχείο που θέλω να εκτελεστεί.

Αν γράψω
exec('php test.php');
το test.php εκτελείται, αλλά αν γράψω
exec('php rank.php?url=http://test.gr');
δεν εκτελείται.

Πως μπορώ να περάσω τις παραμέτρους στο αρχείο που θέλω να εκτελεστεί;

Ευχαριστώ
mhpos enoeis na trexeis authn thn selida sto "background"? enoo otan trexei auth h selida na mhn to vlepei o xrhsths?

Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από Knorcedger » 08 Ιαν 2008 02:53

Τελικά με την exec δεν γίνεται δουλειά καθώς οι περισσότεροι servers την έχουν απενεργοποιημένη.

Αυτό που θέλω να κάνω είναι αυτό που λέει ο fafos. Να εκτελείται η δεύτερη php σελίδα όταν το ζητάει η πρώτη, και παράλληλα να της στέλνει και μια μεταβλητή. Η δεύτερη php σελίδα, παίρνει την παράμετρο, κάνει κάποια πράγματα και αποθηκεύει κάποια δεδομένα στην mysql, δεν επιστρέφει κάτι.

Υπάρχει κάποιος τρόπος να γίνει αυτό;
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 08 Ιαν 2008 13:01

Εκτός από το CLI, μπορείς με require() ή include() αλλά αυτό ίσως θα μπέρδευε το namespace.

Μπορείς όμως να κάνεις και εξωτερική κλήση

Κώδικας: Επιλογή όλων

file('http://www.example.com/rank.php?url=http://test.gr');
όπου www.example.com είναι το domain που βρίσκεται το script.

Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από Knorcedger » 08 Ιαν 2008 14:19

Ευχαριστώ πολύ ρε μάγκα. Το file κάνει ακριβώς αυτό που θέλω. 2 μέρες παλεύω. Ευχαριστώ και πάλι
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 08 Ιαν 2008 15:15

No problemo :)

Βέβαια αν έχεις μεγάλη επισκεψιμότητα καλύτερα να βρείς ένα τρόπο με τα require(), include(), γιατί το file() ανοίγει TCP/IP connections και σε ζόρικες συνθήκες μπορεί να μπουκώσει τον server.

Ubuntu rulez 8)

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από fafos » 08 Ιαν 2008 17:02

Vasika gia background jobs kaloume thn Curl otan h klasikh binary einai apenergopoihmenh (pali me thn methodo exec):

exec("curl -G http://www.mysite.com/run.php > /dev/null &");

To mono provlhma einai h parapano douleia pou prepei na riksoume gia na metaferoume tis times apo thn mia selida sthn allh..

H exec opos poly sosta eipe o cpulse den polygoustarei times sto url pou trexei kai ektos autou einai poly epikindynh function gia thn asfaleia tou server!!!

O klassikos tropos pou xrhsimopoieitai einai ta logs.. sthn selida pou trexei to curl grafoume thn timh se ena arxeio txt (p.x. logs.txt)..

me to pou ekteleitai to exec h selida pou trexei to script anoigei auto to txt arxeio, pairnei thn timh kai adeiazei to txt arxeio..

ena paradeigma:

main.php:

Κώδικας: Επιλογή όλων

$filename = dirname(__FILE__). 'logs.txt';
$somecontent = "timh12345";

if (is_writable($filename)) {

    if (!$handle = fopen($filename, 'a')) {
         echo "Cannot open file ($filename)";
         exit;
    }

    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }

    echo "";

    fclose($handle);

} else {
    echo "The file $filename is not writable";
}
Edo grapsame thn timh ($somecontent = "timh12345"; ) mesa sto logs.txt

meta trexoume to exec:

exec("curl -G http://www.mysite.com/run.php > /dev/null &");

mas paei sto:
run.php

Κώδικας: Επιλογή όλων

//anoigoume to arxeio logs.txt kai pairnoume thn timh
$filename = 'logs.txt';
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

.....edo vazoume thn query pou tha treksoume gia na apothikeusoume h tha epeksergastoume me thn timh pou exei mesa to logs.txt ($contents)....

//edo adeiazoume to logs.txt gia na dextei thn epomenh timh
$fp = fopen('logs.txt', 'w+');
ftruncate($fp, 0);
trexoume to ypoloipo script


Olh authn thn diergasia thn xrhsimopoioume gia "varies" douleies tou server.. gia paradeigma otan theloume na anevasoume ena video ston server mas kai me thn vohtheia kapoion libraries na to metatrepsoume se flv arxeio (opos to youtube)..

An den trexoume authn thn routina sto background o xrhsths einai anagkasmenos na perimenei na anevei to arxeio tou kai meta na perimenei na ginei h metatroph se flv!!

me thn routina omos na trexei sto background o xrhsths aplos anevazei to video kai to script trexei ta ypoloipa afhnontas eleuthero ton xrhsth na paei se allh selida..

ena paradeigma auths ths efarmoghs moreite na deite edo:
http://www.fatsimare.net/myfoxvideo/video/ (user: testme - pass: 123456)

prospatheiste na anevasete ena arxeio video apo to pc sas.. tha perimenete na anevei to arxeio kai meta tha sas pei einai etoimo.. sthn pragmatikothta omos den einai etoimo afou apo piso douleuoun oi libraries kai to metatrepoun se flv!!


auta... :D

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από vassilism » 08 Ιαν 2008 17:17

Α ρε πατρίδα, όπως πάντα τέλειος. :respect:

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 08 Ιαν 2008 17:31

Τα uploads γίνονται πριν πάει ο έλεγχος στην PHP. Αφού ολοκληρωθεί το upload μετά μπορείς να κάνεις τέτοια κόλπα με την μετατροπή του format.

Για το exec curl... δεν βρίσκω το νόημα. Το ίδιο με την file() ή με απλό fopen() ή και με fsockopen() κάνεις, αλλά ανοίγεις και εσωτερικό terminal το οποίο δεν σου προσφέρει κάτι παραπάνω.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από fafos » 08 Ιαν 2008 18:08

cpulse έγραψε:Τα uploads γίνονται πριν πάει ο έλεγχος στην PHP. Αφού ολοκληρωθεί το upload μετά μπορείς να κάνεις τέτοια κόλπα με την μετατροπή του format.

Για το exec curl... δεν βρίσκω το νόημα. Το ίδιο με την file() ή με απλό fopen() ή και με fsockopen() κάνεις, αλλά ανοίγεις και εσωτερικό terminal το οποίο δεν σου προσφέρει κάτι παραπάνω.
Thn exec curl thn xrhsimopoioume otan den yposthrizei o server mas thn klasikh exec php:

exec("/usr/bin/php /file/run.php> /dev/null &");

To file() trexei mexri na fygeis apo thn selida pou to kaleis.. an fygeis thn ora pou kaneis thn metroph se flv tha pareis ena kommati tou flv video. thn file() thn trexoume gia apla pragmata pou ektelountai se dekata tou deuteroleptou kai oxi gia routines pou mporei na diarkesoun kai 1 ora.. pistepse me, ksodepsa polleees ores mexri na to katanohso kai na to efarmoso :lol:

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 08 Ιαν 2008 18:59

Α κατάλαβα πως το θέτεις.

Πάντως κι εγώ αυτό τον καιρό όλο και περισσότερο ασχολούμαι με τα videos κτλ και τις μετατροπές τους και έχω δει οτι παίρνουν πολύ δύναμη. Στην περίπτωση που έχεις ένα site με μεγάλη κίνηση μπορεί να τύχει να πρέπει να γίνονται 3-4 ή και περισσότερα resamplings ταυτόχρονα το οποίο πνίγει τον server. Σε τέτοιες περιπτώσεις νομίζω τα resamplings πρέπει να γίνονται από κάποιο daemon με queues για υπάρχει κι ένα κομμάτι της CPU ελεύθερο για το web serving.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από fafos » 08 Ιαν 2008 19:15

cpulse έγραψε:Α κατάλαβα πως το θέτεις.

Πάντως κι εγώ αυτό τον καιρό όλο και περισσότερο ασχολούμαι με τα videos κτλ και τις μετατροπές τους και έχω δει οτι παίρνουν πολύ δύναμη. Στην περίπτωση που έχεις ένα site με μεγάλη κίνηση μπορεί να τύχει να πρέπει να γίνονται 3-4 ή και περισσότερα resamplings ταυτόχρονα το οποίο πνίγει τον server. Σε τέτοιες περιπτώσεις νομίζω τα resamplings πρέπει να γίνονται από κάποιο daemon με queues για υπάρχει κι ένα κομμάτι της CPU ελεύθερο για το web serving.
To sostotero einai na exeis parapano ton 2 servers otan douleveis me videos kai poly kinhsh.. alla edo sto Ellada den pistevo oti mporei kapoio site na ftasei se auta ta epipeda.. authn thn epoxh feiaxno ena script opou o xrhsths xrhsimopoiei thn camera tou pc tou kai sozei thn fatsa tou san video ston server.. se server me 4 xeon epeksergastes kai 8giga mnhmh otan arxizei na doulevei to script h CPU xtypaei kokkino :lol: logika thelei diko tou server alla pou tetoies polyteleies.. h youtube gia thn enlogo efarmogh exei desmeusei 100+ servers :roll:

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από cpulse » 08 Ιαν 2008 19:31

Γίνονται όλο και περισσότερο της μόδας όμως και πρέπει να αρχίσουμε να βρίσκουμε λύσεις. Αυτή η ιδέα με τα queues με κυνηγάει από πολύ παλιά για άλλες εφαρμογές, και βλέπω τώρα οτι χρειάζεται όλο και περισσότερο.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Php exec, πως θα περάσω παραμέτρους;

Δημοσίευση από fafos » 08 Ιαν 2008 19:44

cpulse έγραψε:Γίνονται όλο και περισσότερο της μόδας όμως και πρέπει να αρχίσουμε να βρίσκουμε λύσεις. Αυτή η ιδέα με τα queues με κυνηγάει από πολύ παλιά για άλλες εφαρμογές, και βλέπω τώρα οτι χρειάζεται όλο και περισσότερο.
to provlhma einai me tous xrhstes pou theloun na doun to arxeio prin akoma to anevasoun :lol:

kapoia sites xrhsimopoioun cronjobs gia na treksoun tis libraries ana 1 video etsi oste na mhn kataponeitai o server, alla opos proeipa o xrhsths ta thelei ola edo kai tora...

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης