PHP & Bash Shell variabelen doorgeven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nu een tijdje wat aan het experimenteren met PHP als CGI laten uitvoeren in de Bash shell. (naar aanleiding van dit artikel @ PHPBuilder)

Ik heb nu een Shell script waarin een blok PHP zit...zie
Embedding PHP shell scripts within a regular shell script

Erg geinig als je onder de commandline even een link naar MySQL wil maken of zo :P:

Ik geef ook een commandline parameter mee, bijv.

script.sh Jan

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# This file uses standard shell scripting with embedded PHP code
#

echo "Parameter waarde van Bash: $1"

# Switch to PHP!
/usr/local/bin/php -q << EOF
<?php

    # We need to escape the variables now using ' \ '
    echo "Parameter waarde van PHP: " . \$ . "\n";
 
    # Let's see what we can do if we set a value in the PHP section
    
   \$nieuwenaam = "Kees";

?>
EOF
# We're in the shell again!

echo "Parameter waarde van de nieuwe naam is: $nieuwenaam"


Nu krijg je ongeveer de volgende output:

Parameter waarde van Bash: Jan
Parameter waarde van PHP: Jan (ja! PHP pakt de waarde van Bash over)
Parameter waarde van de nieuwe naam is:

Bash pakt helaas niet de waarde van een variabele over die in PHP gezet is.. :'(
Althans niet op deze manier..

Weet iemand of ik het volgende resultaat er toch uit kan krijgen?

Parameter waarde van Bash: Jan
Parameter waarde van PHP: Jan
Parameter waarde van de nieuwe naam is: Kees

Het is goed mogelijk dat ik het gewoon over het hoofd zie op het moment...ben al zolang aan het klooien met 'miles of code' ;)

(Is PERL hier beter in??)

BTW:

Nog een klein ander vraagje dat me te binnen schiet:
Is het mogelijk om op het zelfde systeem PHP geinstalleerd te hebben zowel als Apache module en als CGI :?


Ik kijk uit naar jullie reacties _/-\o_ ;)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 14 December 2002 @ 10:02:
Nog een klein ander vraagje dat me te binnen schiet:
Is het mogelijk om op het zelfde systeem PHP geinstalleerd te hebben zowel als Apache module en als CGI :?

Jahoor, gewoon nog een keer ./configure draaien maar dan de --with-apache weglaten en daarna make en make install doen heb je de cgi-binary/shell-versie.

Andere vraag weet ik zo gauw geen antwoord op :)

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Verwijderd schreef op 14 december 2002 @ 10:02:
script.sh Jan
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# This file uses standard shell scripting with embedded PHP code
#

echo "Parameter waarde van Bash: $1"

# Switch to PHP!
/usr/local/bin/php -q << EOF
<?php

    # We need to escape the variables now using ' \ '
    echo "Parameter waarde van PHP: " . \$ . "\n";
 
    # Let's see what we can do if we set a value in the PHP section
    
   \$nieuwenaam = "Kees";

?>
EOF
# We're in the shell again!

echo "Parameter waarde van de nieuwe naam is: $nieuwenaam"
Ik heb het vermoeden dat je niet begrijp wat er in werkelijkheid gebeurt.

Op regel 8 tot 18 wordt een string gebakken die aan de PHP interpreter wordt gegeven. Bash vervangt in die string alvast die variabele. Vervolgens wordt die string uitgevoerd door de PHP interpreter.

Nadat die php-interpreter aan de gang is geweest mag Bash weer verder. Bash kent die variabele verder niet of zo: er heeft geen echte communicatie plaats gevonden tussen PHP en BASH.

Deze constructie is trouwens onnacceptabel ranzig... Probeer maar eens een quote in die variabele te stoppen...
edit:
Hmm die slashes zuigenaddslashes en zo:

[ Voor 7% gewijzigd door kvdveer op 14-12-2002 13:30 ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

quote ipv edit

[ Voor 97% gewijzigd door kvdveer op 14-12-2002 13:30 ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • dmnq
  • Registratie: Januari 2000
  • Laatst online: 30-01 17:46

dmnq

zonder klinkers

ter aanvulling op kvdveer:

op regel 16 staat eigenlijk dit:

PHP:
1
    "" = "Kees";

Hosting (100 MB Harddisk, 1 GB Traffic, 5 POP, MySQL, PHP voor € 3,60 per maand)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet dat het allemaal niet echt nette code is, maar het is gewoon een wild experiment :)

En verder zou het toch mogelijk moeten zijn om PHP wat door te laten geven aan het ("2e") Bash gedeelte?

Het gaat me eigenlijk puur om de uitdaging.... :)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:59

odysseus

Debian GNU/Linux Sid

Verwijderd schreef op 14 december 2002 @ 10:02:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
echo "Parameter waarde van Bash: $1"

nieuwenaam = `/usr/local/bin/php -q << EOF
<?php
    echo "Parameter waarde van PHP: " . \$ . "\n";
   \$nieuwenaam = "Kees";
   echo "\$nieuwenaam";
?>
EOF
`

echo "Parameter waarde van de nieuwe naam is: $nieuwenaam"

Bovenstaande is een brakke constructie, maar het idee lijkt me in ieder geval om te zorgen dat de PHP-interpreter op de een of andere manier als uitvoer 'Kees' geeft en dat je dat dan toewijst aan $nieuwenaam in bash.

Aangezien ik geen PHP schrijf (Perl doet wat ik nodig heb), zou het kunnen dat bovenstaande niet volledig geldige code is :).

[ Voor 4% gewijzigd door odysseus op 14-12-2002 16:34 . Reden: backquote verplaatst. ]

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat is ook een leuk idee :)

Zal het vanavond of morgen nog even proberen...eens kijken of we de limitaties van die scriptjes te slim af kunnen zijn ;)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:59

odysseus

Debian GNU/Linux Sid

Let er wel op dat je nu niet zo makkelijk nog dingen vanuit PHP kunt gaan echo'en...het makkelijkst lijkt om om vanuit PHP naar stderr te schrijven voor de ene soort uitvoer en naar stdout voor de uitvoer die bash moet kunnen lezen. Andersom kan ook, je zult even moeten puzzelen of bash stderr als invoer kan gebruiken :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 18-09 16:43

Kees

Serveradmin / BOFH / DoC
http://www.php.net/manual/en/function.putenv.php is dat niets?

[ Voor 13% gewijzigd door Kees op 14-12-2002 17:00 ]

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb ik ook al wat mee geexperimenteerd, maar tot nu toe komt er nog niet veel uit.. :'(

Terwijl dit wel zou moeten....misschien moet ik er nog eens naar kijken. Op een bepaald moment zie je ook wel eens over dingen heen omdat je er te lang mee bezig bent.

En natuurlijk is er altijd nog de (omslachtige) weg van naar een tekstbestand wegschrijven en die met Bash weer openen... maar dat is IHMO 'valsspelen' en ook niet veel netter dan wat we tot nu toe hebben ;)

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Dit is misschien ook valsspelen maar je kunt het proberen:
shell("$niewenaam=\"$nieuwenaam\"");
(gokje)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21:59

odysseus

Debian GNU/Linux Sid

Shadowman schreef op 14 december 2002 @ 17:47:
Dit is misschien ook valsspelen maar je kunt het proberen:
shell("$niewenaam=\"$nieuwenaam\"");
(gokje)

In de meeste talen (en ik vermoed dat dat ook voor PHP geldt) is het zo dat een shell() of system() een nieuwe shell opent om zijn werk te doen en niet de aanroepende shell gebruikt. Waarschijnlijk werkt je idee dus niet :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.

Pagina: 1