Sida 1 av 2

bash-variabel till php-skript? [LÖST]

Postat: 26 sep 2009, 19:52
av ubot
Jag problem med variabler i bash kontra php. Jag har ett bash-skript som har ett par variabler. Sedan kör jag en php-fil som en del av bash-skriptet på en rad. Nu vill jag att php-filen ska använda variabler som finns i bash-skriptet. Tex har jag en variabel som heter $url och som innehåller olika webbadresser. Den variabeln vill jag "bollla" över till php-filen så att php-skriptet använder samma variabel som bash-skriptet har skapat. Hur gör man det här, går det öht?

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 20:01
av andol
Du kan använda PHP:s funktion getenv() för att läsa miljövariabler du satt i ditt bash-skript.

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 22:13
av ubot
andol skrev:Du kan använda PHP:s funktion getenv() för att läsa miljövariabler du satt i ditt bash-skript.
Ok, men hur gör man? Får det inte att fungera, hur för jag in två bash-variabler i min php-fil som jag kör från bash med: php phpfilen.php?

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 22:28
av andol

Kod: Markera allt

#!/bin/bash

IDOL=andol
export IDOL

php foo.php

Kod: Markera allt

#!/usr/bin/php
<?php

echo(getenv("IDOL") . "\n");

?>

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 22:32
av Konservburk
Du kan ha en php-fil som ser ut så här:

Kod: Markera allt

<?
echo $_ENV['var'];
echo $_SERVER['argv'][1];
?>
... som du anropar så här:

Kod: Markera allt

var=hej php test.php san

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 23:10
av ubot
Konservburk skrev:Du kan ha en php-fil som ser ut så här:

Kod: Markera allt

<?
echo $_ENV['var'];
echo $_SERVER['argv'][1];
?>
... som du anropar så här:

Kod: Markera allt

var=hej php test.php san
Ok, och om jag vill kasta in två variabler då?

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 23:19
av Konservburk
Det där var två variabler... den ena som miljövariabel och den andra som parameter. Men du kan såklart använda två miljövariabler eller två parametrar istället vilket du nu föredrar...

Kod: Markera allt

<?
echo $_ENV['var1'];
echo $_ENV['var2'];
?>

Kod: Markera allt

var1=hej var2=san php test.php

Kod: Markera allt

<?
echo $_SERVER['argv'][1];
echo $_SERVER['argv'][2];
?>

Kod: Markera allt

php test.php hej san

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 23:30
av ubot
Konservburk skrev:Det där var två variabler... den ena som miljövariabel och den andra som parameter. Men du kan såklart använda två miljövariabler eller två parametrar istället vilket du nu föredrar...

Kod: Markera allt

<?
echo $_ENV['var1'];
echo $_ENV['var2'];
?>

Kod: Markera allt

var1=hej var2=san php test.php

Kod: Markera allt

<?
echo $_SERVER['argv'][1];
echo $_SERVER['argv'][2];
?>

Kod: Markera allt

php test.php hej san
Ok, tackar. Jag antar att jag sedan använder variabeln i php-skriptet mha $var där jag vill ha värdet inne i php-skriptet?

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 23:34
av Konservburk
Nej, du använder $_SERVER['argv'][1] eller $_ENV['var'] beroende på om du går via miljövariabler eller om skickar med variablerna som parametrar. Studera mina exempel en gång till.

Re: bash-variabel till php-skript?

Postat: 26 sep 2009, 23:57
av ubot
Konservburk skrev:Nej, du använder $_SERVER['argv'][1] eller $_ENV['var'] beroende på om du går via miljövariabler eller om skickar med variablerna som parametrar. Studera mina exempel en gång till.
Ok, då förstår jag. Men, går det i php att "spotta ut" variabeln i en funkton såhär: function_name('$_ENV['var'];'); Eller blir det fel?

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 00:13
av Konservburk
ubot skrev:Ok, då förstår jag. Men, går det i php att "spotta ut" variabeln i en funkton såhär: function_name('$_ENV['var'];'); Eller blir det fel?
Det borde snarare bli function_name($_ENV['var']); istället. Du kan annars byta namn på variablerna om du känner för det...

Kod: Markera allt

$var = $_ENV['var'];

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 01:32
av ubot
Konservburk skrev:
ubot skrev:Ok, då förstår jag. Men, går det i php att "spotta ut" variabeln i en funkton såhär: function_name('$_ENV['var'];'); Eller blir det fel?
Det borde snarare bli function_name($_ENV['var']); istället. Du kan annars byta namn på variablerna om du känner för det...

Kod: Markera allt

$var = $_ENV['var'];
Ok, då har jag nog fått kläm på det iaf. Jag får se om koden fungerar när jag har kommit längre i mitt skript. Tack för hjälpen så här långt!

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 16:45
av ubot
Ok, jag försöker nu att få ett php-skript att använda en variabel från ett bash-skript. Det går inget vidare... Här är min php- och bash-kod:

test.sh:

Kod: Markera allt

#!/bin/bash

url=$(curl -Ls http://example.com)

var=$url php twitter.php
test.php:

Kod: Markera allt

<?php

function getTextBetweenTags($tag, $html)
{
    $pattern = "/<$tag?.*>(.*?)<\/$tag>/";
    preg_match_all($pattern, $html, $matches);
    return $matches[1];   
}

$html = echo $_ENV['var'];

$content = getTextBetweenTags('a', $html);

foreach( $content as $item )
{
    echo $item.'<br />';
}
?>
Jag försöker alltså att slänga in innehållet i variablen $url som variabeln $html mha echo $_ENV['var'];, men det ger felmeddelandet:

Parse error: syntax error, unexpected T_VAR in $HOME/test.php on line 10

Jag ser att variabeln $url innehåller koden till sidan example.com som jag har hämtat mha curl, men sedan går något fel i php-skriptet, antagligen på line 10. :) Jag gör kanske trots allt fel när jag bollar in variabeln i php-skriptet från bash-skriptet?

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 16:50
av Konservburk
Du måste använda funttar om du tänker göra på det sättet...

Kod: Markera allt

var="$url" php twitter.php
Jag föreslår att du använder $html = file_get_contents('http://example.com') i php-skriptet istället.

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 16:52
av ubot
Konservburk skrev:Du måste använda funttar om du tänker göra på det sättet...

Kod: Markera allt

var="$url" php twitter.php
Jag föreslår att du använder $html = file_get_contents('http://example.com') i php-skriptet istället.
Ok, men jag kommer inte runt att jag behöver bolla in en variabel eftersom php-skriptet ska använda olika URLs som kommer från ett bash-skript. jag måste alltså på något vis få php-skriptet att använda kod från en URL, vars adress finns i en bash-variabel. Nu testade jag med det här:

Kod: Markera allt

$html = file_get_contents('$_ENV['var'];')
Där url är satt till var=$(echo "URL") i bash-skriptet. Det fungerade inte. Samma felmeddelande som förut.

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 16:59
av ubot
Nej, vänta! Nu snurrade jag nog till det rejält. Jag testade med att ha kvar curl och sedan köra med get_contents istället och nu verkar det hända grejer. Nu får jag det här felet istället:

./test.sh: line 7: /usr/bin/php: Argument list too long

Koden ser ut så här:

Kod: Markera allt

#!/bin/bash

url=$(curl -Ls "http://www.expressen.se/Nyheter/1.1722360/misstankte-helikopterpiloten-har-gripits")

var=$url php twitter.php
och

Kod: Markera allt

<?php

function getTextBetweenTags($tag, $html)
{
    $pattern = "/<$tag?.*>(.*?)<\/$tag>/";
    preg_match_all($pattern, $html, $matches);
    return $matches[1];   
}

$html = file_get_contents('$_ENV['var'];')

$content = getTextBetweenTags('a', $html);

foreach( $content as $item )
{
    echo $item.'<br />';
}
?>
Om jag kör med url=$(echo "http://example.com") i bash-skriptet och sedan använder samma php-skript men med get_contents så får jag som sagt samma fel som tidigare, dvs Terminalen klagar på line 10 i php-skriptet: Parse error: syntax error, unexpected T_VAR in $HOME/test.php on line 10

Det är ju uppenbart att php-skriptet inte får adressen som finns i bash-variablen $url på ett korrekt sätt.

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 17:10
av Konservburk
ubot skrev:Ok, men jag kommer inte runt att jag behöver bolla in en variabel eftersom php-skriptet ska använda olika URLs som kommer från ett bash-skript. jag måste alltså på något vis få php-skriptet att använda kod från en URL, vars adress finns i en bash-variabel. Nu testade jag med det här:

Kod: Markera allt

$html = file_get_contents('$_ENV['var'];')
Där url är satt till var=$(echo "URL") i bash-skriptet. Det fungerade inte. Samma felmeddelande som förut.
Problemet är att du inte förstår vad du gör. Du kan inte ha enkelfnuttar runt variabeln på det där sättet. Och vad gör semikolonet innuti funktionsanropet?

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 17:13
av ubot
Konservburk skrev:
ubot skrev:Ok, men jag kommer inte runt att jag behöver bolla in en variabel eftersom php-skriptet ska använda olika URLs som kommer från ett bash-skript. jag måste alltså på något vis få php-skriptet att använda kod från en URL, vars adress finns i en bash-variabel. Nu testade jag med det här:

Kod: Markera allt

$html = file_get_contents('$_ENV['var'];')
Där url är satt till var=$(echo "URL") i bash-skriptet. Det fungerade inte. Samma felmeddelande som förut.
Problemet är att du inte förstår vad du gör. Du kan inte ha enkelfnuttar runt variabeln på det där sättet. Och vad gör semikolonet innuti funktionsanropet?
Det är sant, jag vet inte vad jag håller på med. Jag vill helt enkelt föra in en variabel från ett bash-skript in i ett php-skript.

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 17:22
av Konservburk
ubot skrev:Jag vill helt enkelt föra in en variabel från ett bash-skript in i ett php-skript.
Det har du redan gjort. Men det är skillnad på '$_ENV['var'];' och $_ENV['var'] i php-skriptet. Och det är skillnad på var=$url och var="$url" i shell-skriptet.

Re: bash-variabel till php-skript?

Postat: 27 sep 2009, 17:42
av ubot
Konservburk skrev:
ubot skrev:Jag vill helt enkelt föra in en variabel från ett bash-skript in i ett php-skript.
Det har du redan gjort. Men det är skillnad på '$_ENV['var'];' och $_ENV['var'] i php-skriptet. Och det är skillnad på var=$url och var="$url" i shell-skriptet.
Ok, men nu flyttade sig felet från rad 10 till rad 12:

Parse error: syntax error, unexpected T_VARIABLE in $HOME/test.php on line 12

Vilket alltså är raden under:

Kod: Markera allt

...
$html = file_get_contents($_ENV['var'])
$content = getTextBetweenTags('a', $html);
...
Jag har använt fnuttar i bash-skriptet, dvs var="$url" php test.php