Portál AbcLinuxu, 26. dubna 2024 13:18


Dotaz: BASH + PHP v jednom súbore

27.5.2009 16:58 matej
BASH + PHP v jednom súbore
Přečteno: 1233×
Odpovědět | Admin
ahojte, potrebujem poradiť

potrebujem vytvoriť bash skript, ktorý by spúšťal php skript ... problém je že by bolo super, keby to neboli 2 súbory, ale iba jeden a php kód by bol vložený priamo v tom bash skripte ... to by tiež ešte nebol problém ale potrebujem presmerovať STDIN bash skriptu na STDIN v tom php skripte a neviem ako. Tiež všetky parametre bash skriptu posunúť ako parametre toho php skriptu (ale to nieje až aké dôležité)

niečo v štýle:
#!/bin/bash

echo "bla bla bla bla"

/usr/bin/php ?????????????

exit

#### START PHP ####
?php
    echo "start \n";
    $f = fopen('php://stdin','r');
    while (!feof($f))
    {
        echo fgets($f,1024) . "\n";
    }
    fclose($f);
    echo "stop \n";
?
použitie: cat data.dat | ./databaza.sh --test

PS: bonusové body pre každého kto to dokáže bez pomocných súborov :D

ďakujem
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.5.2009 17:17 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
Odpovědět | | Sbalit | Link | Blokovat | Admin
A čo by to malo robiť? Nestačilo by použiť niečo ako
#!/usr/bin/php
<?php
        echo "TEST\n";
        for ($i = 1; $i < $argc; $i++)
        {
                echo "parameter " . $i . ": " . $argv[$i] . "\n";
        }
?>
prípadne v tom bash skripte vygenerovať html kód a ten poslať (cez rúru) php?
27.5.2009 17:39 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
ten BASH nastavuje nejaké enviroment premenné pre to PHP, ktoré sa nedajú zmeniť už v PHP (konkrétne nastavenie pripojenia k oracle). Lepšie povedané php tuším bez nich ani nenaštartuje. Momentálne to riešim tak že mám 2 skripty, ale robi to strašný bordel keď je všetko dvojmo :D.

Nieje problém do nejakej premennej dostať tú časť skriptu ktorá obsahuje len PHP. problém je to že php ho potrebuje na štandardnom vstupe a tým pádom "neviem" na štandardný vstup presmeerovať to čo príde do bash skriptu.

pokial mám 2 súbory, je to jednoduché:
#!/bin/sh

NLS_LANG=slovak_slovakia.ee8mswin1250
NLS_NUMERIC_CHARACTERS="."
atď.

export ORACLE_SID LD_LIBRARY_PATH ...

./import.php $@ <&0

27.5.2009 18:58 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
#!/usr/bin/env NLS_LANG=slovak_slovakia.ee8mswin1250 atd. /path/to/php
In Ada the typical infinite loop would normally be terminated by detonation.
27.5.2009 21:50 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
Odpovědět | | Sbalit | Link | Blokovat | Admin
podarilo sa :)

... do <( ??? ) za tým php treba dať niečo čo z aktuálneho súboru zobrazí len php časť
#!/bin/bash

LN=`grep -n '<?php' $0 | tail -1 | awk -F: '{print $1}'`;
LN=$(($LN - 1))
 
php -f <(sed "$LN,$ !d" $0) -- $@

exit

##### START PHP #####
<?php
    echo "STDIN START \n";
    $data = fopen('php://stdin','r');
    while (!feof($data))
    {
        echo 'PHP:'.fgets($data,1024);
    }
    fclose($data);
    echo "\n";
    echo "STDIN STOP \n";
    echo "PARAMETRE \n";
    echo print_r($argv,true).'test';

:~/Desktop/TEST$ cat data.dat | ./script.sh -param1 --param2 -test3 
STDIN START 
PHP:123456
PHP:abcdefgh
PHP:098765432
PHP:test
PHP:endpwd
PHP:
PHP:
STDIN STOP 
PARAMETRE 
Array
(
    [0] => /dev/fd/63
    [1] => -param1
    [2] => --param2
    [3] => -test3
)

28.5.2009 06:10 deadmail
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
nebolo by lepsie pouzit HERE document?
#!/bin/bash

LN=...

php << KONIEC
<?php
....
?>
KONIEC

...pokracuje bash...
28.5.2009 10:28 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
práve som to skúšal, ale BASH má nejaký problém so syntaxou PHP ... vadia mu napríkad $ v názvoch premenných :(
28.5.2009 16:31 deadmail
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
tomu sa da lahko zabranit, vid tldp.org
php <<'KONIEC'
...
KONIEC
28.5.2009 06:15 deadmail
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
vymazat v sede ide aj bez pocitania riadkov
sed "1,/##### START PHP #####/d"
28.5.2009 10:14 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
pravda :D ... občas sa mi stáva, že si nevšimnem úplne zjavnú vec :D inak problém s tým sedom je to , že on nenájde to správne druhé 'START PHP', ale nájde sám seba. Tam by sa mu zišlo nejako povedať že hľadáš až to druhé 'START PHP' alebo ten pattern v tom zede nejako zamaskovať ...
28.5.2009 16:32 deadmail
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
sed "1,/^##### START PHP #####/d"
28.5.2009 06:52 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
A proč to neudělat jednoduše přes ten env?
In Ada the typical infinite loop would normally be terminated by detonation.
28.5.2009 10:18 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
vyzerá to prehľadnejšie ... predsalen je ľajhšie napísať do cronu "getdata | parsedata | import" ako "getdata | evn 'nieco strasedlheneprehladne' import ". a navyše tam môžem pridať aj iné veci ... ten enviroment bol len ako príklad.
28.5.2009 10:48 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
Ale ten env dáte za shebang do skriptu, ne do cronu. V cronu to furt bude vypadat "getdata | parsedata"
In Ada the typical infinite loop would normally be terminated by detonation.
28.5.2009 12:18 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
už som to konečne pochopil :D ... takto by to šlo, ale stále sú to 2 súbory a tomu som sa chcel vyhnúť + okrem nastavenia enviromentu sa do toho skriptu dajú pridať aj iné veci
28.5.2009 13:44 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
Nerozumím kde vidíte dva soubory.

A jaké další věci chcete do toho skriptu dát?
In Ada the typical infinite loop would normally be terminated by detonation.
28.5.2009 17:44 matej
Rozbalit Rozbalit vše Re: BASH + PHP v jednom súbore
už to chápem 2 :D ... to path/to/php je cesta k php a nie cesta k php skriptu ... to ma zmiatlo ... v tom pripade je to super riešenie :D ďakujem

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.