Avatar billede gertnissen Nybegynder
28. marts 2006 - 21:52 Der er 20 kommentarer

Hvilken url er jeg på

Jeg har forsøgt mig med bla. følgende

$_SERVER['PHP_SELF']
$_SERVER['SERVER_NAME']
__FILE__
pathinfo
ect etc

Men jeg rammer ikke rigtigt det jeg ønsker.

Hvis mit script ligger under sub.domain.dk/script.php, får jeg returneret sub/script.php og det virker skidt sammensat med sub.domain.dk, altså som sub.domain.dk/sub/script.php.

Hvordan finder jeg den rigtige sti til mit script og det rigtige domæne ?
Avatar billede mstorgaard Praktikant
28. marts 2006 - 22:05 #1
Jeg er lidt ny til PHP, men er PHP_SELF alene det samme som $_SERVER['PHP_SELF']? For PHP_SELF alene plejer at virke for mig. Nu har jeg så glemt om der skal $ foran PHP_SELF :)
Avatar billede avminarm Juniormester
28. marts 2006 - 22:10 #2
jeg er ikke helt sikker på hvad du vil, men har du prøvet med: $_SERVER['DOCUMENT_ROOT'] eller $_SERVER['SCRIPT_FILENAME'] eller $_SERVER['SCRIPT_NAME'] eller $_SERVER['REQUEST_URI']
Avatar billede gertnissen Nybegynder
28. marts 2006 - 22:19 #3
carlsbergnyder> php_self alene virker kun hvis globals er on (anbefales ikke)

avminarm> De giver mig blot script.php og lign. men hvordan får jeg det sammenstillet til en korrekt url ?
Avatar billede zurekk Nybegynder
28. marts 2006 - 22:39 #4
echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; if(!empty($_SERVER['QUERY_STRING'])) echo "?".$_SERVER['QUERY_STRING'];

Prøv med den der
Avatar billede avminarm Juniormester
28. marts 2006 - 22:44 #5
hmmm jeg er måske lidt tung lige nu - men hvad vil du?

du kan benytte alle de ovenstående til at finde stien med - du kan benytte explode til at opdele en streng med - hvis det hosten du skal finde kan du bruge: $_SERVER['HTTP_HOST'];
Avatar billede gertnissen Nybegynder
28. marts 2006 - 22:46 #6
$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; giver mig kun sub.domain.dk/script.php

Jeg glemte måske en lille ekstra krølle, scriptet kan yderligere ligge i en folder (sorry)

like
sub.domain.dk/folder/script.php
domain.dk/sub/folder/script.php
Avatar billede zurekk Nybegynder
28. marts 2006 - 22:47 #7
Ja, det burde den også vise.
Prøv at lig scriptet i en fil, som ligger i en undermappe.
Avatar billede zurekk Nybegynder
28. marts 2006 - 22:49 #8
Bruger nøjagtig den samme kode, og får dette resultat :
http://www.domain.dk/1337/index.php?content=film&page=show&id=3
Avatar billede gertnissen Nybegynder
28. marts 2006 - 22:53 #9
$_SERVER['HTTP_HOST'] og $_SERVER['SERVER_NAME'] giver mig begge sub.domain.dk
$_SERVER['PHP_SELF'] giver mig script.php
Avatar billede hmortensen Nybegynder
28. marts 2006 - 22:55 #10
Du kan udskrive alle server variablerne sådan her, så du kan se hvilke du skal bruge:
<pre><?php print_r($_SERVER); ?></pre>
Avatar billede zurekk Nybegynder
28. marts 2006 - 22:56 #11
Altså..
Prøv nu bare at ligge:
<? echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; if(!empty($_SERVER['QUERY_STRING'])) echo "?".$_SERVER['QUERY_STRING']; ?>

Et eller andet sted i et dokument, i en undermappe.
Jeg er ikke prof. php'er, men den virker for mig, så hvorfor skulle den ikke det for dig :D?
Avatar billede gertnissen Nybegynder
28. marts 2006 - 22:56 #12
Jeg har forsøgt mig med disse funktioner

function htmlpath($relative_path) {
  $realpath=realpath($relative_path);
  $htmlpath=str_replace($_SERVER['DOCUMENT_ROOT'],'',$realpath);
  return $htmlpath;
}

function reduceUrl($url){
    $info = parse_url($url);
    return preg_replace('/^www\./i','',basename($info['host']));
}

function htmlpath($realpath) {
  $i = substr_count($_ENV["SCRIPT_URL"],'/')."<br>";
  $baserealpath=realpath(str_repeat('../',$i-1));
  $htmlpath=str_replace($baserealpath,'',$realpath);
  return $htmlpath;
}
Avatar billede gertnissen Nybegynder
28. marts 2006 - 23:04 #13
ok lidt mere info
fra sub.domain.dk/index.php includer sub.domain.dk/folder/script.php og jeg vil gerne finde sub.domain.dk/folder/

Det tætteste jeg kommer er realpath(__FILE__) mht. til at få folderen på den included fil.

Jeg undskylder at ovenstående info først kommer nu ;-(
Avatar billede avminarm Juniormester
29. marts 2006 - 09:49 #14
er folder forskellig fra gang til gang?
Avatar billede zurekk Nybegynder
29. marts 2006 - 13:22 #15
Når du includer en fil, vises inholdet jo efter placering på den fil som det er includet i.
Avatar billede gertnissen Nybegynder
29. marts 2006 - 20:46 #16
Så har jeg lagt 2 små scripts på min hjemmeside

prøv http://famnissen.dk/script1.php med include('downloads/script2.php');

script1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?PHP
echo '<h1>script1</h1>';
echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; if(!empty($_SERVER['QUERY_STRING'])) echo "?".$_SERVER['QUERY_STRING'];
echo '<pre>';print_r($_SERVER);echo '</pre>';
echo __FILE__;
echo '<hr>';
include('downloads/script2.php');
?>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

script2
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?PHP
echo '<h1>script2</h1>';
echo $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; if(!empty($_SERVER['QUERY_STRING'])) echo "?".$_SERVER['QUERY_STRING'];
echo '<pre>';print_r($_SERVER);echo '</pre>';
echo __FILE__;
?>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Det sidste __FILE__ output i begge viser deres fysiske placering, men hvordan kommer jeg videre fra det.

Point's er øget, da spørgsmålet ikke nemt lader sig besvarer.
Avatar billede avminarm Juniormester
30. marts 2006 - 09:37 #17
gert>> du bliver altså nødt til at forklare bedre eller evt. svare på de spørgsmål vi stiller dig - det er svært at læse dine tanker.

Hvorfor vil du finde "folder"?
Skifter "folder" navn fra gang til gang?
er det i virkeligheden URL i adresselinien du vil omskrive?
Avatar billede gertnissen Nybegynder
30. marts 2006 - 17:10 #18
ok, det kan du have ret i - sorry.

Jeg forsøger at finde ud af hvor et givet php script fysisk befinder sig når det udføres - uanset om der bruges subdomæner, folder i foldere, includes (og uafhængigt af web server ver) og lign.

Min post fra 29/03-2006 20:46:23 beskriver en løsning der ser ud til at virke uanset om den kaldes med  http://famnissen.dk/script1.phphttp://famnissen.dk/downloads/script2.php eller  http://downloads.famnissen.dk/script1.php. Men om den er bullet-proff ved jeg ikke.

Det problem jeg faktisk forsøger at finde en løsning på er følgende:
index.php som vil være uploadet i en for mig ukendt url, folder og subdomæne struktur danner en simpel html side, hvor der bla. indgår et IMG tag. index.php kaldes altid gennem en include fra et andet php script (også med ukendt placering). Billedet til dette IMG tab dannes af captcha.php (der dog altid ligger i samme folder som min index.php) ala. <img src="captcha.php"> - for at det kan virke skal jeg kende den korrekt/fulde url til hvor captcha.php ligger, deraf spørgsmålet - så hvis jeg ved hvor index.php ligger, kan jeg nemt danne en korrekt scr="". Muligvis griber jeg det forkert an, forslag modtages meget gerne ?

Jeg håber at har bragt klarhed over mit problem.
Avatar billede avminarm Juniormester
30. marts 2006 - 19:01 #19
hmmm - hvad skal alle disse krum spring gøre godt for - hvordan kan det være at der er så mange ukendte URL'er? Jeg er lidt mere med men kan ikke helt se ideen?

Måske kan du benytte explode("/", $enurl); og så med if/else tjekke efter de forskellige array dele.

jeg synes bestemt det her er et af de sjovere sprg. på E ;o)
Avatar billede gertnissen Nybegynder
30. marts 2006 - 19:55 #20
Hvis du har forslag til hvordan jeg kan undgå disse krumspring, hører jeg meget gerne om det ?

Som sagt så har jeg fundet en løsning (29/03-2006 20:46:23), men koden er godt nok grim.

$relative_path=__FILE__;
$x=substr(dirname(str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME'])),1);
$htmlpath=str_replace($x,'',$_SERVER['SERVER_NAME']).str_replace($_SERVER['DOCUMENT_ROOT'],'',dirname($relative_path));
if (substr($htmlpath,0,1)=='.') $htmlpath=substr($htmlpath,1);

Forbedringer modtages meget gerne....
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