PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   string vorne auslesen, hinten anhängen (http://www.selfphp.de/forum/showthread.php?t=22545)

feuerstein 11.12.2009 19:59:22

string vorne auslesen, hinten anhängen
 
Hallo,
ich hab sehr wenig Ahnung von php. Gesucht hab ich auch, aber nichts gefunden was helfen könnte.

Ich habe auch schon experimentiert, aber mit arrays hab ich das nicht hin bekommen.
Möglicherweise kann ich auch einen einfachen Befehl verwenden?

Das soll passieren:

$domain == "hans.dampf.einedomain.de"

Ich möchte alles VOR ".einedomain.de" kopieren und hinten Zufügen in der Form

hans.dampf.einedomain.de/hans.dampf/

In GFA-Basic könnte ich es :-)

Danke Frank

Hoffentlich kann jemand helfen.

R4Zz0R 11.12.2009 23:32:24

AW: string vorne auslesen, hinten anhängen
 
hmm da würde mir ein weg einfallen,

PHP-Code:

<?php

$site 
$_SERVER['SERVER_NAME'];

if (
$site === 'hans.dampf.einedomain.de' ) {
//über $to_copy werden die ersten 10 zeichenalso der teil hans.dampf. abgeschnitten.
$to_copy substr($site10);
//natürlich den code nach deinen wünschen anpassen.
$mixed_vars $site;
$mixed_vars .= '/';
$mixed_vars .= $to_copy;
$mixed_vars .= '/';
//ausgabe von $mixed_var
echo $mixed_var;

}
else {
exit;
//oder weiterer code
}
?>

Du Kannst naürlich auch (bei mehreren wildcards oä.)
andere wege nutzen aber so sähe für mich ein einfacher code aus.
(ungetestet keine garantie xD)
Hoffe ich konnte dir helfen
MFG
R4Zz0R

urvater 12.12.2009 00:57:23

AW: string vorne auslesen, hinten anhängen
 
Ich gehe doch einmal davon aus, daß hans.dampf.meinedomain.de nur ein Beispiel ist und somit die 10 Zeichen nicht immer gesetzt sind.
Mit explode() kommst du deinem Ziel eigentlich schon recht nahe, wenn du dir sicher sein kannst, daß es sich um eine Domain handelt.
PHP-Code:

<?php
$domain 
'hans.dampf.meinedomain.de';
$domainArr explode('.',$domain);
$repDomain $domain.'/'.$domainArr[0].'.'.$domainArr[1].'/';
?>

Hiermit würdest du zumindest dein Ergebnis erreichen, wenn die angegebene Domain so ist, wie du sie hier vorgegeben hast. Mit ein paar kleinen Modifikationen bekommst du es aber auch so zusammen, daß es bei allen Domainangaben funktioniert.

urvater 12.12.2009 01:09:56

AW: string vorne auslesen, hinten anhängen
 
Grundsätzlich wirst du vermutlich auch noch parse_url verwenden oder zumindest in Erwägung ziehen müssen.

parse_url

R4Zz0R 12.12.2009 01:25:30

AW: string vorne auslesen, hinten anhängen
 
mixed parse_url ( string $url [, int $component = -1 ] )

Diese Funktion parst einen URL und gibt ein assoziatives Array zurück, das die im URL vorhandenen Komponenten enthält.

Diese Funktion ist nicht dazu gedacht, einen gegebenen URL zu validieren, sondern es gliedert einen URL in die unten aufgeführten Bestandteile. Unvollständige URLs werden als Parameter akzeptiert, parse_url() versucht, sie bestmöglich zu analysieren.

-> OK.
Alternativ kann er auch so arbeiten.
xD gerade als mir (selbe idee wie bei dir urvater) die idee mit explode zu arbeiten kam, stand schon alles da xD

@urvater
Noch ne andere frage zu parse_url
Die funktion gibt ja ein array zurück mit den inhalten:
Array
(
[scheme] => http
[host] => hostname
[user] => benutzername
[pass] => passwort
[path] => /pfad
[query] => argument=wert
[fragment] => textanker
)

Der url :
PHP-Code:

<?php
$url 
'http://benutzername:passwort@hostname/pfad?argument=wert#textanker';

print_r(parse_url($url));

echo 
parse_url($urlPHP_URL_PATH);
?>

enthält am schluss ja eine #
wird diese eigentlich auch mitgegeben ?^ oder liegt es wenn die # mit übergeben wird an der php.ini ?^^

Habe mal aus juks ein wenig gebastelt nur will die blöde # nicht aus dem übergebenen $test rausgehen.

MFG
R4Zz0R

urvater 12.12.2009 01:43:24

AW: string vorne auslesen, hinten anhängen
 
Verstehe irgend wie nicht dein Problem mit dem Textanker. Die # gibt ja nur den html Textanker an. Willst du ihn nicht haben musst du ihn aus dem Array entfernen.
Ansonsten findest du seinen Wert ja in [fragment].

Somit ist die # nach parse_url nicht mehr selbst im Array. Die angegebene Domain im Test bleibt davon unberührt.

In Fall des Treaderstellers wird ja nur [host] genutzt bzw. soll verwendet werden. Den Rest aus dem Array würde er ggf. beim Zusammensetzen wieder benötigt.

R4Zz0R 12.12.2009 01:53:09

AW: string vorne auslesen, hinten anhängen
 
uuupppsss...

jup.
jetzt hab ichs auch kapiert... xD

Thx für die schnelle antwort @urvater

MFG
R4Zz0R

feuerstein 12.12.2009 14:05:22

AW: string vorne auslesen, hinten anhängen
 
Zitat:

Zitat von R4Zz0R (Beitrag 133007)
hmm da würde mir ein weg einfallen,

@R4Zz0R Danke.

Erst mal Danke auch für die anderen schnellen Hilfen. Ich werde nun einige Zeit benötigen, das zu testen.

Da ich aber sehe, dass allgemein das Thema interessiert, möchte ich mal mein Projekt etwas besser beschreiben.

Ich möchte beliebige Subdomains annehmen und weiterleiten können.

hans.dampf.einedomain.de
gerd.ist.ein.depp.und.schlaeft.nur.einedomain.de

Schon deshalb entfällt array würde ich sagen, oder?

Genau genommen ist es mir egal, was für eine Subdomain verwendet wird. Ist die zu routen, dann landet die im passenden Verzeichnis mit einer index.html - wenn nicht wird die Domain "einedomain.de" aufgerufen.

mein Nameserver kann * Subdomains, mein Server *einedomain.de


Ich möchte kurz in Basic erklären, wo es drauf ankommt. Das wird jeder schnell begreifen können.

doman$="hans.dampf.einedomain.de"

da = instr(domain$,".einedomain.de") Punkt vor einedomain beachten.

if da
enddomain$ = domain$+ "/" + mid$(domain$,1,da-1)
(erste stelle bis gefunden minus Punkt)
endif

Alles zusammengesetzt ist dann das was ich will.

Nun müsste meine derzeitige Domainweiche so umgebaut werden, dass die ermittelten Daten hier eingefügt und verwendet werden.

<?php
$domain = $_SERVER['SERVER_NAME'];

if($domain=="einedomain.de" or $domain=="www.einedomain.de")
{
header('Location: http://einedomain.de');
}

if($domain=="hans.dampf.einedomain.de") oder eine andere
{
header('Location: http://hans.damp.einedomain.de/hand.dampf/'); je nach zusammenbau
}

?>

Wenn für die ermittelte Subdomain kein Verzeichnis besteht, gibt es ja automatisch ein Error 404. Also kein Problem oder ich leite dann um.

Komplette Subdomanweiche für tausende Subdomains, wenn die zugehörigen Ordner vorhanden sind.

Ich finde die Idee gut und zudem entsteht wenig Serverbelastung.

So, ich werde nun auch mal experimentieren.

Sollte jemand so etwas fertig haben, wäre für mich heute schon Weihnachten :-))

Ach ja, sollte auch unter PHP4.3 laufen.

Gruß Frank

R4Zz0R 12.12.2009 14:30:08

AW: string vorne auslesen, hinten anhängen
 
Hm...
Zitat:

Komplette Subdomainweiche für tausende Subdomains, wenn die zugehörigen Ordner vorhanden sind.
Wäre da nicht eventuell eine lösung zb. über eine datenbank einfacher für dich ?
Du willst schlieslich "tausende" subs weiterleiten, und jede sub einzeln als solchen code

PHP-Code:

if($domain=="hans.dampf.einedomain.de"oder eine andere
{
header('Location: http://hans.damp.einedomain.de/hand.dampf/'); je nach zusammenbau


einzutragen ist sicher etwas umständlich.

MFG
R4Zz0R

feuerstein 12.12.2009 15:25:59

AW: string vorne auslesen, hinten anhängen
 
@R4Zz0R

Ich hab mich sicher unverständlich ausgedrückt.

$domain = $_SERVER['SERVER_NAME'];
if(IN der $domain enthalten ==".einedomain.de")
{
- den String Domain teilen vor .einedomain.de
- alles vor .einedomain ist das Verzeichnis wo es hin soll
- und alles zusammenbauen und nachstehend einfügen.
header('Location: "http://" + $domain' + "/" + "alles vor .einedomain als Ordner");
}

Ergebnis: http://hans.dampf.einedomain.de/hans.dampf/

Du siehst, ich brauche nur diesen einen Aufruf und eine Datenbank ist nicht nötig.

Ich will nicht prüfen, ob es die Subdomain gibt, ich führe diese lediglich aus und verzweige zum zusammengebauten Ort.

Ist der Ort zu erreichen, dann prima.

Wenn nicht Error 404 und fertig.

Und meine Arbeit ist nur, die Ordner anzulegen.

Frank


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:40:56 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.