Php wil script niet uitvoeren
Ik wil dat wanneer iemand een button aanklikt er een Docker container opgestart wordt.
onder /var/www/html staat webscript.php
onder /var/www/cgi-bin staat docker_run.sh
webscript.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if($_POST["submitted"])
{
exec ('/var/www/cgi-bin/docker_run.sh');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>?</title>
</head>
<body>
<form method="post">
<input type="hidden" name="submitted">
<button type="submit">Run the script!</button>
</form>
<form action="exec(/var/www/cgi-bin/docker_run.sh)">
<input type="submit" value="Open Script">
</form>
</body>
</html>
if($_POST["submitted"])
{
exec ('/var/www/cgi-bin/docker_run.sh');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>?</title>
</head>
<body>
<form method="post">
<input type="hidden" name="submitted">
<button type="submit">Run the script!</button>
</form>
<form action="exec(/var/www/cgi-bin/docker_run.sh)">
<input type="submit" value="Open Script">
</form>
</body>
</html>
docker_run.sh
Code (php)
1
2
3
4
5
6
2
3
4
5
6
#!/bin/bash
for i in {1..10}
do docker run -name docker-nginx$i -P -d nginx
sleep 3
done
for i in {1..10}
do docker run -name docker-nginx$i -P -d nginx
sleep 3
done
Gewijzigd op 13/05/2019 08:37:10 door - Ariën -
Dit veld heeft geen value, dus dit if-statement:
Evalueert
Gewijzigd op 13/05/2019 22:50:58 door Thomas van den Heuvel
Ik heb iets anders geprobeerd:
onder /var/www/html staat nu test.php
<!.. This link will add ?run=true to your URL, test.php?run=true -->
<a href="?run=true">Click me!</a>
mijn test.sh:
#!/bin/bash
sudo docker run -it ubuntu
Ik kan nu inderdaad in de browser op click me, maar er gebeurt niets?
Moet met hoofdletters.
$_GET['run']
En kijk ook eens wat de uitvoer is van je shell-script:
Dat docker.sh script gaat niet werken want het script heeft het over een nginx terwijl je een apache2 geinstalleerd hebt.
Yoop Overmaat op 14/05/2019 12:50:10:
Dat docker.sh script gaat niet werken want het script heeft het over een nginx terwijl je een apache2 geinstalleerd hebt.
Waarom zou dat niet werken? Het gaat hier over nginx runnen in een docker container, dan maakt dat toch niet uit dat er apache op de hostmachine staat?
Toevoeging op 14/05/2019 13:30:24:
Misschien dit eens proberen:
Indien je script niet runt zou ik vooral wel gaan kijken of PHP rechten heeft om dat shell script uit te voeren. In de variabele $output wordt nu de output opgevangen en geprint op het scherm zodoende je verder kan debuggen.
Code (php)
Gewijzigd op 14/05/2019 13:31:00 door Jelle Dnw
Jelle Dnw op 14/05/2019 13:27:11:
Indien je script niet runt zou ik vooral wel gaan kijken of PHP rechten heeft om dat shell script uit te voeren.
Dit kun je toch in afzondering testen en dat hoef je (in eerste instantie, om dingen te testen) niet te doen via een form submit? Dat pogingen om een form submit af te handelen falen vanwege gebrekkige kennis lijkt mij een apart probleem.
Separation of concerns mensen.
Daarnaast wil je ook terugkopppeling over wat (niet) werkt, dus maak je scripts verbose (mondig).
Code (php)
Gewijzigd op 14/05/2019 17:36:28 door Thomas van den Heuvel
Ok, ben nog aan het werk maar ga er straks mee aan de slag, bedankt voor alle reacties. Ik hou jullie op de hoogte.
Thomas van den Heuvel op 14/05/2019 17:34:11:
Dit kun je toch in afzondering testen en dat hoef je (in eerste instantie, om dingen te testen) niet te doen via een form submit? Dat pogingen om een form submit af te handelen falen vanwege gebrekkige kennis lijkt mij een apart probleem.
Separation of concerns mensen.
Daarnaast wil je ook terugkopppeling over wat (niet) werkt, dus maak je scripts verbose (mondig).
Separation of concerns mensen.
Daarnaast wil je ook terugkopppeling over wat (niet) werkt, dus maak je scripts verbose (mondig).
Je webserver user kan een andere user/group zijn dan wanneer je het script via SSH test, vandaar dat ik het even aanhaalde. Dan heeft je afgezonderde test een andere uitkomst dan je test via de webserver user.
Die else kan je aanwenden om het wat mooier weer te geven, ik verkoos een var_dump omdat je dan ziet wat de output van je exec is. Beetje programmeur kan er dan uit afleiden of het wel/niet werkt. Tenzij je die docker containers door iedereen wil laten op starten, maar dat denk ik nu niet.
Daarnaast gebruik ik trouwens bijna nooit else statements.
"Avoid else, return early." is een gouden regel in OO programming.
Gewijzigd op 15/05/2019 14:34:47 door Jelle Dnw
Wanneer je je PHP code (tijdens ontwikkeling) mondiger maakt heb je meer voelsprieten en kun je veel sneller dingen uitsluiten.
Op het moment dat je getest hebt dat je conditie op de juiste momenten true oplevert kan dat else-statement natuurlijk weg, ik heb ook nergens aangehaald dat je dit soort debugconstructies in je code zou moeten laten zitten.
Idealiter test je
Gewijzigd op 15/05/2019 16:21:23 door Thomas van den Heuvel
Ja, die var_dump was om de TS op weg te zetten om zijn script te debuggen. Daarna kan hij vanzelfsprekend verder aan de slag om alles aan te passen naar zijn eigen weldunken.