[php] PHP vanuit bash-script uitvoeren *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na een hele tijd zoeken ben ik met mijn script al wel een heel eind gekomen maar nu weet ik het niet meer.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
echo "Content-type: text/plain"
echo ""

/usr/bin/php  -q << EOF 
<?php 
$p = $_GET[p];
$u = $_GET[u];

$mysql_server = "localhost"; 
$mysql_pass = "password"; 
$mysql_login = "username"; 
$mysql_database = "db"; 
$mysql_conn = mysql_connect ("$mysql_server", "$mysql_login", "$mysql_pass"); 
mysql_select_db("$mysql_database"); 

$query = mysql_query("SELECT id FROM viewme_users where nickname='{$u}'"); 
$object = mysql_fetch_object($query); 

$query1 = mysql_query("SELECT user_id,logo FROM viewme_img where plaatje='{$p}'"); 
$object1 = mysql_fetch_object($query1); 
print_r($object1);

if ($object->id == ''){ exit(); }
if ($object1->user_id == ''){ exit(); }


if ($object->id == $object1->user_id){
    echo "plaatje is goed gekeurd";
    if ($object1->logo == 'no'){
        ?> 
        EOF
        
        /usr/X11R6/bin/composite -gravity southeast logo.png  ../admin/users/viewme/www/img/$p  ../admin/users/viewme/www/img/aaaa_$p
        /usr/bin/php  -q << EOF 
        <?php
    }else{
        echo "Logo is al geplaatst";
    }
}else{
    echo "plaatje is afgekeurd";
}


?> 
EOF


wat is nu het probleem na het sluiten van het php gedeelte wil ik weer in bash script verder gaan maar dat pakt hij helaas niet.
wat doe ik verkeerd??

Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt iig die bash regels uitvoeren dmv een exec() of system()...
Dan is je probleem volgens mij ook opgelost

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat heb ik ook al eens geprobeerd maar dat deed hij ook al niet vandaar dat ik het zo wilde proberen.
ik had het toen als volgt gedaan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
if ($object->id == $object1->user_id){
    echo "plaatje is goed gekeurd";
    if ($object1->logo == 'no'){
                      system(/usr/X11R6/bin/composite -gravity southeast 
                      logo.png  ../admin/users/viewme/www/img/
                      $p  ../admin/users/viewme/www/img/aaaa_$p);
    }else{
        echo "Logo is al geplaatst";
    }
}else{
    echo "plaatje is afgekeurd";
}

Acties:
  • 0 Henk 'm!

  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

Ik zou eigenlijk zelfs denken dat het helpt als je wat meer info geeft wat je probeert te doen. Ik snap persoonlijk bijvoorbeeld geheel niet waarom je uberhaupt php in bash nest, terwijl ik niet zie wat je niet direct uit php kunt doen?
[edit]
Overigens zijn de $p variablen, meer gewoon de PHP variabelen niet beschikbaar buiten je php code blok, dus dat werkt sowiezo niet.

[ Voor 24% gewijzigd door Kippenijzer op 14-01-2004 11:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een programmatje Image Magick,
daar mee wil in een logo op de foto kunnen zetten voor de mensen die dat willen.

Image magick kan ik onder php niet aanspreken vanwegen save mode.
Dus dan maar onder bash want van cgi heb ik helemaal geen kaas gegeten.

Ik heb het eerst geprobeerd alleen bash script maar toen zat ik met de controle die ik wil uitvoeren want naar het database connecten en zo dat wilde allemaal niet zo lekker dus dacht dan maar bash met een gedeelte php

en dat was het wel zo'n beetje denk ik,
als je nog meer wil weten dan hoor ik dat wel.

[edit]
Klopt je hebt gelijk zie het ook in:
PHP & Bash Shell variabelen doorgeven

dat is wel minder hoe kan ik het dan het beste oplossen?

[ Voor 24% gewijzigd door Verwijderd op 14-01-2004 12:10 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
kan je niet PHP het volgende bash (?) filetje laten aanroepen? Of de bestanden vanuit een BAT-file aanroepen?

[bat-file 'logotjeplakken.bat']
bash1script.bash
php.exe -f phpscript.php
bash2script.bash
[/]

edit:

Zie nu dat je dit op n *nix bak draait ,dus bat-files zullen niet werken. Maar misschien dat daar een alternatief voor is?

[ Voor 27% gewijzigd door frickY op 14-01-2004 12:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
frickY schreef op 14 januari 2004 @ 12:26:
kan je niet PHP het volgende bash (?) filetje laten aanroepen? Of de bestanden vanuit een BAT-file aanroepen?

[bat-file 'logotjeplakken.bat']
bash1script.bash
php.exe -f phpscript.php
bash2script.bash
edit:

Zie nu dat je dit op n *nix bak draait ,dus bat-files zullen niet werken. Maar misschien dat daar een alternatief voor is?
[/quote]

Ik weet wat je bedoeld,
maar ik wil de check in het bash scriptje zelf hebben omdat je anders makkelijk exploits op af kan vuren.
Dus zo doende alles in bash

vooral omdat de bash bestand in de browser word geladen.
die hij moet hem uitvoeren en ook meteen weer redirecten naar de volgende pagina.

[ Voor 12% gewijzigd door Verwijderd op 14-01-2004 12:38 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

K, eerst ff jargon opschonen :) Bash-script valt volgens mij onder CGI, en is de *nix-variant van batchfiles in DOS.

Dan: je probleem zit volgens mij in regel 5, waar je aangeeft tot EOF alles als PHP te laten verwerken. Dat zorgt er natuurlijk voor dat eventuele bash-script-code na PHP ook aan de PHP-parser gevoerd wordt, ipv "normaal" uitgevoerd te worden. Als ik jou was zou ik die vervangen door
code:
1
/usr/bin/php phpbestand.php
en de php-code in een apart bestand zetten. Kan helaas ff niet testen, maar zoiets zou het moeten zijn... Hier meer info :)


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kwam net ook nog

code:
1
#!/usr/local/bin/ -d safe_mode=off


tegen, ik weet alleen niet of dat het werkt en al helemaal niet of het kwaat kan maar misschien dat een van jullie dat weet.

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Verwijderd schreef op 14 januari 2004 @ 14:39:
Ik kwam net ook nog

code:
1
#!/usr/local/bin/ -d safe_mode=off


tegen, ik weet alleen niet of dat het werkt en al helemaal niet of het kwaat kan maar misschien dat een van jullie dat weet.
Dat kan geen kwaad :) Dat doet zelfs helemaal niks :P Als je met de safemode van php wil gaan kloten op een server die je niet zelf hebt ingericht: ik zeg: doe het niet, als het al zou werken. Die safemode staat niet voor niks aan.

[ Voor 20% gewijzigd door Rataplan op 14-01-2004 14:47 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat dacht ik ook al dat het niets zou doen.
Maar ik dacht al eest maar even iets vragen voordat er dadelijk iets verkeerd gaat.

Maar goed ik zoek weer verder naar een oplossing,
want helaas wil het nog niet helemaal werken :(

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Verwijderd schreef op 14 januari 2004 @ 14:52:
Dat dacht ik ook al dat het niets zou doen.
Maar ik dacht al eest maar even iets vragen voordat er dadelijk iets verkeerd gaat.
(1) Het doet niks omdat je geen commando geeft, alleen een directory (/usr/local/bin/), dat was je opgevallen?
(2) Heb je dat linkje in mijn voor-vorige post ( B) ) gezien? Daar staat toch redelijk wat nuttige info over commandline execution...


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 17:33

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Verwijderd schreef op 14 januari 2004 @ 11:39:
Ja dat heb ik ook al eens geprobeerd maar dat deed hij ook al niet vandaar dat ik het zo wilde proberen.
ik had het toen als volgt gedaan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
if ($object->id == $object1->user_id){
    echo "plaatje is goed gekeurd";
    if ($object1->logo == 'no'){
                      system(/usr/X11R6/bin/composite -gravity southeast 
                      logo.png  ../admin/users/viewme/www/img/
                      $p  ../admin/users/viewme/www/img/aaaa_$p);
    }else{
        echo "Logo is al geplaatst";
    }
}else{
    echo "plaatje is afgekeurd";
}
Je bent er wel van op de hoogte dat de opdracht in system niet gequote is? :)

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je bent er wel van op de hoogte dat de opdracht in system niet gequote is? :)
Ja zekers maar ook al zou ik hem quote dan zou hij het nog niet doen vanwegen safe_mode als ik het goed begrepen had.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik vond dit in een php tijdschrift

Overriding safe_mode with the CGI binary
A lot of us probably have faced situations in which we don’t
have much say about the environment that’s going to be used
for the things that are being programmed. That can be extremely
annoying at times, primarily because webhosting companies
tend to limit what you can do with PHP on their webservers,
thus limiting the set of functionality that you can use. There’s a
nice trick to bypass this kind of “security” in some situations. A
lot of companies (although not recommended for performance
reasons) still install PHP as a CGI binary. They also tend to be a
bit meaner than that by not letting us use .htaccess files to influence
the PHP configuration (which is caused by Apache’s AllowOverride
directive not allowing Options), and on top of
that, they will run PHP in safe mode. That’s not a very nice
working environment, is it? Fortunately, there’s a hack, or
rather, a fact, that a lot of people don’t know about. When running
PHP as a CGI program, the PHP interpreter always tries to
look for a php.ini in the directory in which the script resides.
That allows us to just override the safe_mode directive by putting
safe_mode = Off in a php.ini, stuff it in the relevant directory,
and boom.

Ik weet niet of het werkt maar als het zou werken dan kan het soms wel eens makkelijk zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Rataplan schreef op 14 januari 2004 @ 14:59:
[...]
(1) Het doet niks omdat je geen commando geeft, alleen een directory (/usr/local/bin/), dat was je opgevallen?
(2) Heb je dat linkje in mijn voor-vorige post ( B) ) gezien? Daar staat toch redelijk wat nuttige info over commandline execution...
Sorry ik had je linkje even over het hoofd gezien,
das wel jammer want dat had me een hoop tijd gescheeld want hier is de oplossing:

code:
1
/usr/bin/php -c /custom/directory/custom-file.ini my_script.php

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Afbeeldingslocatie: http://www.rataplan.net/files/got/cheer.gif

Als mijn server het weer doet - zo ergens morgenavond, schat ik :( - verschijnt hier een toepasselijk plaatje :P


Journalism is printing what someone else does not want printed; everything else is public relations.

Pagina: 1