[php] Variabele maken met php code erin

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi beste mensen,

Ik ben vrij nieuw in php en heb een vraag die vast niet al te moeilijk is, maar ik kom er zelf niet uit. Ik wil php een file laten creeëren waarin php code staat. Ik gebruik de volgende code:

PHP:
1
2
3
4
5
6
7
$data = "$filiaalid='1';";

$file = "testfilecreate.php";   
if (!$file_handle = fopen($file,"w")) { echo "Cannot open file"; }  
if (!fwrite($file_handle, $data)) { echo "Cannot write to file"; }  
echo "Joepie, het is gelukt! $file";   
fclose($file_handle);


Het probleem, dat moge duidelijk zijn, is dat er in het bestandje slechts ='1'; komt te staan.

Mijn vraag is dus, hoe kun je een variabele vullen met php code zonder dat deze al geïnterpreteerd wordt. Hoe krijg ik gewoon een string code met ongeïnterpreteerde variabelen in een variabele?

Alvast bijzonder bedankt voor de reacties!

Anne

Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 20-09 15:31
Escapen met een backslash: \$filiaal.

Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Probeer eens:
code:
1
$$data


:)

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Nu online

Cyphax

Moderator LNX
Nou, dat zit zo: omdat je er dubbele quotes omheen zet gaat ie $filiaalid proberen te parsen, dus de variabele, en die bestaat niet... nou kun je ook enkele quotes gebruiken (') om die string heen en dan heb je dat weer niet, maar dan moet je wel die enkele quotes escapen in je string (\') of de string even anders maken (iets als $data = "$" . "filiaalid='1'" werkt vast ook wel)
Hier wat meer info over die quotes, dat is toch wel handig om even te lezen zodat je de volgende keer niet zoiets meer tegenkomt.
[edit]
ahh te traag, de oplossen van jan-marten vind ik ook wel een mooie. :)

[ Voor 27% gewijzigd door Cyphax op 18-10-2006 11:04 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • woutertje
  • Registratie: Maart 2002
  • Laatst online: 19-09 16:02
Spuit elf ;)

[ Voor 88% gewijzigd door woutertje op 18-10-2006 11:03 ]


Acties:
  • 0 Henk 'm!

  • j.nolles
  • Registratie: Oktober 2006
  • Laatst online: 19-09 14:27
PHP:
1
2
3
4
5
6
7
8
9
<?php
$data = "\$filiaalid='1';";

$file = "testfilecreate.php";   
if (!$file_handle = fopen($file,"w")) { echo "Cannot open file"; }  
if (!fwrite($file_handle, $data)) { echo "Cannot write to file"; }  
echo "Joepie, het is gelukt! $file";   
fclose($file_handle);
?>


Werkt dit wel?

EDIT: Ben nog niet snel genoeg met posten zie ik :)

[ Voor 8% gewijzigd door j.nolles op 18-10-2006 11:04 ]


Acties:
  • 0 Henk 'm!

  • InfoTracer
  • Registratie: November 2001
  • Laatst online: 05:58
j.nolles schreef op woensdag 18 oktober 2006 @ 11:03:
PHP:
1
2
3
4
5
6
7
8
9
<?php
$data = "\$filiaalid='1';";

$file = "testfilecreate.php";   
if (!$file_handle = fopen($file,"w")) { echo "Cannot open file"; }  
if (!fwrite($file_handle, $data)) { echo "Cannot write to file"; }  
echo "Joepie, het is gelukt! $file";   
fclose($file_handle);
?>


Werkt dit wel?

EDIT: Ben nog niet snel genoeg met posten zie ik :)
probeer het eens zou ik zeggen
anders leer je het nooit


edit: hmm is idd iemand anders blijkbaar is het nog veelste vroeg om voor mij te posten ;)

[ Voor 8% gewijzigd door InfoTracer op 18-10-2006 11:13 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
InfoTracer schreef op woensdag 18 oktober 2006 @ 11:05:
[...]


probeer het eens zou ik zeggen
anders leer je het nooit
Dat was iemand anders die het vroeg. :)

Maar de backslash werkt perfect! Hartstikke bedankt voor de (megasnelle) reacties. De pagina met uitleg over de quotes is ook erg leerzaam, bedankt.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
De belangrijkste vraag in deze is waarom wil je dat doen? Want ik voorzie een aanwenning van ranzige code-praktijken hier... (maw. wat je wilt, is vast een mooiere niet system-compromising oplossing voor.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 20-09 15:31
$$var werkt niet goed:
PHP:
1
2
3
$test = "aap";
$test2 = "$$test = $test";
print $test2;
levert "$aap = aap" op ipv "$test = aap".
$$var is wel handig om een option te selecteren (erg ranzig):
PHP:
1
2
3
4
5
6
$opt1 = $opt2 = $opt3 = "";
$var = "opt1"; //of opt2 of opt3...
$$var = "SELECTED"; // => $opt1 = "SELECTED"
print "<option $opt1>Optie 1</option>\n";
print "<option $opt2>Optie 2</option>\n";
print "<option $opt3>Optie 3</option>\n";


@Grijze Vos:
Dit soort systemen wordt nog weleens door bepaalde wizzards gebruikt om een .PHP file te maken met daarin systeem instellingen (db-connectie instellingen, preferences, etc).

[ Voor 19% gewijzigd door jan-marten op 18-10-2006 15:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Grijze Vos schreef op woensdag 18 oktober 2006 @ 11:27:
De belangrijkste vraag in deze is waarom wil je dat doen? Want ik voorzie een aanwenning van ranzige code-praktijken hier... (maw. wat je wilt, is vast een mooiere niet system-compromising oplossing voor.)
Ik ben bezig met een cms waarbij je meerdere, dezelfde, websites in één cms kunt aanmaken. Dus als je bijvoorbeeld meerdere filialen hebt, die elk een eigen site nodig hebben kun je via het cms gewoon een nieuwe site aanmaken. Omdat ze hun eigen domeinnaam hebben maar wel in één database staan maak ik een nieuwe directory aan op de server waar ik de indexfile (die dus hetzelfde is voor elke site) heen kopieer, en dan laat ik via dit bestandje het goede id in voor de juiste content uit de database.

Als er iemand een mooier idee heeft om het te doen hoor ik het natuurlijk graag!

Acties:
  • 0 Henk 'm!

Verwijderd

jan-marten schreef op woensdag 18 oktober 2006 @ 15:49:
$$var werkt niet goed:
PHP:
1
2
3
$test = "aap";
$test2 = "$$test = $test";
print $test2;
levert "$aap = aap" op ipv "$test = aap".
Natuurlijk klopt dat wel... Bij $test2 wordt $test geëvalueerd. Dus $test wordt vervangen door aap -> $aap = aap.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 18 oktober 2006 @ 17:55:
[...]

Natuurlijk klopt dat wel... Bij $test2 wordt $test geëvalueerd. Dus $test wordt vervangen door aap -> $aap = aap.
En laat dat nu net niet zijn wat de TS wil.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
De optie van Cyphax is het netst imo. Ik parse nooit variabelen binnen een string met dubbele quotes.
Als je simpelweg $data = '$filiaalid='1';'; gebruikt dan zal het ongetwijfeld werken.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Cartman! schreef op woensdag 18 oktober 2006 @ 20:39:
De optie van Cyphax is het netst imo. Ik parse nooit variabelen binnen een string met dubbele quotes.
Als je simpelweg $data = '$filiaalid='1';'; gebruikt dan zal het ongetwijfeld werken.
ehm, nee toch?
PHP:
1
$data = '$filiaalid='1';';

je ziet de 1 paars worden, wat een dikke compile-error zal opleveren :)
Jij bedoelt een van deze 3:
PHP:
1
2
3
$data = '$filiaalid=\'1\';';
$data='$filiaalid="1"';
$data='$filiaalid=1'; //want waarom wil je een int in een string hebben?

[ Voor 6% gewijzigd door MBV op 18-10-2006 22:43 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
MBV schreef op woensdag 18 oktober 2006 @ 22:43:
[...]


ehm, nee toch?
PHP:
1
$data = '$filiaalid='1';';

je ziet de 1 paars worden, wat een dikke compile-error zal opleveren :)
Jij bedoelt een van deze 3:
PHP:
1
2
3
$data = '$filiaalid=\'1\';';
$data='$filiaalid="1"';
$data='$filiaalid=1'; //want waarom wil je een int in een string hebben?
Je hebt helemaal gelijk :)
De onderste optie is het inderdaad naar mijn mening :)

Acties:
  • 0 Henk 'm!

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 16:30

TheDane

1.618

Verwijderd schreef op woensdag 18 oktober 2006 @ 17:49:
[...]


Ik ben bezig met een cms waarbij je meerdere, dezelfde, websites in één cms kunt aanmaken. Dus als je bijvoorbeeld meerdere filialen hebt, die elk een eigen site nodig hebben kun je via het cms gewoon een nieuwe site aanmaken. Omdat ze hun eigen domeinnaam hebben maar wel in één database staan maak ik een nieuwe directory aan op de server waar ik de indexfile (die dus hetzelfde is voor elke site) heen kopieer, en dan laat ik via dit bestandje het goede id in voor de juiste content uit de database.

Als er iemand een mooier idee heeft om het te doen hoor ik het natuurlijk graag!
Grappig, ik heb ook zo'n CMS. Bij mij is het "filiaal" afhankelijk van de hostname. Hostname wordt uitgelezen, naam wordt eruit gefilterd, siteID in de database erbij gehaald, deze als sessie variable geregistreerd, en alle andere zaken (welke pagina's, templates, users etc) wordt daarna adhv die sessie var bepaald. (kort door de bocht.)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
jan-marten schreef op woensdag 18 oktober 2006 @ 15:49:
@Grijze Vos:
Dit soort systemen wordt nog weleens door bepaalde wizzards gebruikt om een .PHP file te maken met daarin systeem instellingen (db-connectie instellingen, preferences, etc).
Als je dat soort dingen wil doen moet je eens kijken naar de functie parse_ini_file. Ik zou zeer zeker niet code weg gaan schrijven en de deur wagenwijd open zetten voor een scala aan aanvallen als het ook netter kan.
(Ini formaat is makkelijk zat om weg te schrijven, ik geloof dat er zelfs een functie voor in de comments van bovenstaande url staat.)

Voor wat de TS aan het doen is zou ik het ook zo aanpakken als TheDane beschrijft.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1