Avatar billede strcoder Nybegynder
30. marts 2008 - 12:55 Der er 18 kommentarer og
1 løsning

Eksekvere kode fra fil/database?

Hej.

Nogen der ved om der findes en eksekverings/foltolknings funktion i php, så man kan tage noget php kode fra f.eks. en fil eller en database og så eksekvere det?

Noget i den her stil:

$urlGet = "http://lala.dk/kode.txt";
$myCode = file_get_contents($urlGet);
php_execute($myCode);

kode.txt kune se således ud:
<?php
  echo "Hello World\";
?>

Findes der en funktion i stil med 'php_execute()'? Eller anden løsning?
Avatar billede strcoder Nybegynder
30. marts 2008 - 12:59 #1
Gerne udenat lave en løsning hvor man først skal gemme koden i en php fil og så bare kalde/include den.
Avatar billede dkfire Nybegynder
30. marts 2008 - 13:01 #2
eval() kan bruges.

http://php.net/eval
Avatar billede showsource Seniormester
30. marts 2008 - 13:04 #3
db => eval() som dkfire foreslår.
Og hvis det er en fil, så brug blot include()
Al phpkode i en includefil vil blive afviklet, uanset filnavn!
Så hvis det er en fil, så husk at kalde den php som filtype, ellers vil indholdet evt. kunne vises i browseren.
Avatar billede showsource Seniormester
30. marts 2008 - 13:07 #4
Men du kan ikke include en url, og så bruge den phpkode som der bliver afviklet på url.
Avatar billede strcoder Nybegynder
30. marts 2008 - 16:21 #5
dkfire:> Jeg prøvede med eval lige efter jeg postede spørgsmålet her, men der kom hele tiden fejl, den kunne ikke rigtigt li' filen jeg gav den.

showsource:> Som du selv skriver, kan jeg ikke include filen eller gemme den som en php fil da den hentes fra et andet domæne.

Jeg har indtil videre kodet løsningen jeg prøvede at komme uden om.
- hent fil fra fjern-url.
- gem fil lokalt.
- include fil.
- slet fil igen.

Jeg skulle bruge det til et eksperiment, hvor jeg gerne ville lave en slags Benchmark Test af webhoteller, jeg har en del abonnementer, men det ene kører dårligere end det andet, så jeg ville gerne sammenligne, og måske få andre med på den.

Det færdige script ligger på:
- http://www.brainpowered.dk/?page=1&subpage=2&subsubpage=4

Prøv at teste det hvis I gider, og jeg kan godt tåle kritik. Ideer er også meget velkomne.
Avatar billede strcoder Nybegynder
30. marts 2008 - 16:21 #6
Og tak for hjælpen forresten :-)
Avatar billede olebole Juniormester
30. marts 2008 - 17:54 #7
<ole>

Tænk grundigt over, hvad du gør! Hvis en bruger kan gætte navnet på din include-fil, kan han se al PHP-kode i den, hvis den f.eks. hedder '*.inc' eller '*.txt'. Det kan han ikke, hvis den hedder '*.php'  ;o)

Google's cashede sider er forøvrigt en guldgrube, hvis man er ude på at finde den slags dokumenter. Der ligger ofte fejlsider med PHP- og/eller MySQL-fejl, som kan indeholde overordentlig nyttige informationer, hvis man har slemme hensigter

/mvh
</bole>
Avatar billede olebole Juniormester
30. marts 2008 - 18:01 #8
Dit problem med eval, skyldes uden tvivl, du bruger PHP-tags i din remote fil. Hvis du i filen 'http://www.domain.dk/sti/til/fil.txt' skriver:

function bla() {
    return "HeyHep";
}
print bla();

- og i filen 'http://www.other-domain.dk/sti/til/fil.php' skriver:

<?php
$sPHP = file_get_contents("http://www.domain.dk/sti/til/fil.txt");
eval($sPHP);
?>

Så fungerer det fint  =)
Avatar billede olebole Juniormester
30. marts 2008 - 18:03 #9
- og du kan også nøjes med funktionen i .txt-dokumentet og så skrive:

<?php
$sPHP = file_get_contents("inc.txt");
eval($sPHP);
print bla();
?>
Avatar billede olebole Juniormester
30. marts 2008 - 18:04 #10
- og selvfølgelig skulle det være:
    $sPHP = file_get_contents("http://www.domain.dk/sti/til/fil.txt");
Avatar billede sjh Nybegynder
31. marts 2008 - 03:32 #11
øhh, det burde ikke være noget problem at køre hele php siden. Dog kan den ikke klare filer som benytter: include('bla')

<?php
$mixedCode = '
<html>
  <head>
    <title>Eval dokument</title>
  </head>
  <body>
  <p>klokken er: <?=date("H:i:s");?></p>
  </body>
</html>
';

/* eller

-- fil.txt --
<html>
  <head>
    <title>Eval dokument</title>
  </head>
  <body>
  <p>klokken er: <?=date("H:i:s");?></p>
  </body>
</html>
--/ fil.txt --

$mixedCode = file_get_contents("http://www.domain.dk/sti/til/fil.txt");
*/
eval('?>'.$mixedCode.'<?');
?>
Avatar billede olebole Juniormester
31. marts 2008 - 12:50 #12
sjh >> Hvad mener du?  =)
Avatar billede sjh Nybegynder
31. marts 2008 - 16:36 #13
ole: det kan godt være jeg skulle være gået tidliger i seng :D

Men som jeg forstod spørgsmålet, med de fejl strcoder fik i (skriver)
http://www.eksperten.dk/spm/825766#rid7072042

Så var jeg sikker på at han/hun ville hente en hel php-side med php,html osv.. og så
eksekvere det hele på et andet domæne.

Men sådan var det måske ikke :D
Avatar billede strcoder Nybegynder
01. april 2008 - 17:23 #14
Egentlig en tåbelig ide fra min side, for folk skal køre kode fra en tekstfil fra mit site, på deres eget site, det kræver en del tillid, nok mere end man kan forvente.

Jeg smækker det hele i en enkelt fil man så kan køre på sit site når man har gennemgået koden.

eval() ser ud som en løsning, når bare den bruges korrekt, jeg vil studere funktionen for den kan jeg helt sikkert bruge mange steder, points til dkfire.
Avatar billede dkfire Nybegynder
01. april 2008 - 18:08 #15
Lyder fornuftigt, man skal passe lidt på hvad man kører igennem eval().
Men jeg ligger et svar :-)
Avatar billede olebole Juniormester
01. april 2008 - 23:05 #16
'eval' er et lille mellempolynesisk ord, som betyder: 'Husk, livrem og seler!'. Brugt med forsigtighed og fornuft kan den dog være ganske anvendelig  ;o)
Avatar billede sjh Nybegynder
03. april 2008 - 14:59 #17
strcoder: hmm den test viser kun hvor hurtig harddisken er eller hvad ??

Jeg har prøvet den på min server med en Intel Core 2 Duo E8400(C0) 3.0GHz 1333MHz 6MB (Wolfdale) / Western Digital 150GB Raptor SATA, 10000 rpm, 16 MB og Apache / MySQL 5.0.45

og der siger testen hos mig.

Test[1] - 36 ms.
Test[2] - 32 ms.
Test[3] - 34 ms.
Test[4] - 33 ms.
Test[5] - 39 ms.
Test[6] - 33 ms.
Test[7] - 39 ms.
Test[8] - 41 ms.
Test[9] - 37 ms.
Test[10] - 33 ms.
Test[11] - 39 ms.
Test[12] - 33 ms.

Gennemsnit denne kørsel: 33 ms.
Gennemsnit total: 33 ms.

Kører test: 32 af 32

Jeg kan se at harddisk LED lyser meget under testen..
Avatar billede dkfire Nybegynder
09. april 2008 - 18:15 #18
Husk at acceptere svaret for at lukke spørgsmålet.
Avatar billede strcoder Nybegynder
16. april 2008 - 18:07 #19
sjh: Testen udfører de operationer man oftest bruger fil, database og strengmanipulering, og den gør det ved at hhv. oprette, redigere og slette data, og så se hvor lang tid det tog. (liste nedenfor)

Logger starttidspunkt.
Opretter database forbindelse.
Opretter tabel i databasen.
Opretter fil med 8 bytes indhold på disk.
Læser filens indhold ind i variabel.
Indsætter variablens indhold i tabellen.
Læser indhold fra tabel og streng-konkatonerer med variablen.
Opdaterer tabellens indhold med den nye konkatonerede streng.
Tømmer tabellen.
Dropper tabellen.
Sletter filen på disk.
Lukker database forbindelse.
Logger sluttidspunkt.

Din servers tider er ok syntes jeg, jeg opnår samme tider på webhotellerne men desværre oplever jeg tit at den spiker på over 200, og nogen gange timer den ud, det kommer du næppe til at opleve da du har din egen server.

Min teori med langsomme webhoteller er:
Firma starter lavpris webhotel, og køber en server.
Firmaet begynder at læsse kunder ind på serveren indtil den går ned hele tiden, firmaet opstiller endnu en server og processen gentager sig.

Derfor tror jeg at min test på Gigahost er bedre end på Servage.net, Gigahost har bare ikke fået kunder nok endnu til at serveren begynder at køre dårligt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester