Mit PHP Script eine lokale URL in URL auf Webserver umwandeln..
Andi
- php
0 Vinzenz Mai0 Andi0 Vinzenz Mai0 Andi0 Der Martin0 Andi
Hallo zusammen !
Ich bin nun seit mehreren Stunden dämlich und genervt am Rumprobieren, wie eigentlich etwas ganz einfaches erzielt werden sollte.
Aber es liegt an meinem Wissen, und ich weiss nicht genau, ob das Problem in einem Konventionsmist besteht.
Folgendes : Ich möchte per Browserdatei eine kopierte URL in der Zwischenablage von z.B. "C:\WINDOWS\Desktop\Projekt_01\test.htm" per Knopfdruck in eine Web-URL umwandeln, die so aussieht :
"www.test.ch/test.htm"
Im Prinzip möchte ich auf einer Homepage immer jeweils Daten oder Dateien für andere Nutzer freigeben können, und diese Links dann per Email verschicken. Da mir das Rumklicken und ständige Ersetzen der Browserzeile durch den richtigen Pfad für die Webveröffentlichung langsam zu lästig geworden ist, habe ich das ganze zuerst mit Javascript zu realisieren versucht, was dann aber nicht geklappt hat, und auch neu mit einem PHP-Script, das ich auf den Server geladen habe, funzt es immer noch nicht richtig.
Im Prinzip will ich eine einzelne Formulardatei, z.B. "url_umwandlung.php", mit der ich die Lokal-URL eingeben kann, und mit dem Button springt dann der Browser sofort auf die entsprechende URL auf dem Webserver.
Probleme gabs folgende :
echo '<meta http-equiv="refresh" content="10; URL=http://'.$urloutput8.'">';
Aber an den MOD-Rechten der Datei auf dem Server kann es nicht liegen, und der Server lässt es irgendwie nicht zu, dass ein PHP-Script auf den Server selber verweist, auf dem es sich befindet (?)
Ich bin langsam am Durchdrehen, und frage daher eher einen Experten, als dass ich mit diesem *** noch weitere Stunden verplempere.
PS : Nein, ein JOOMLA oder eine eigene Wikipedia kommen nicht in Frage, um die Dateien zu veröffentlichen. Eine Wikipedia habe ich schon, und ich möchte einfach eine Ordner- und Dateistruktur mitsamt Inhalten auf dem Web veröffentlichen, ohne mir da gross Gedanken zu machen. Die Linkkontrolle dient lediglich dazu, um zu schauen, ob die Dateien schon hochgeladen wurden, und weil einige Dateien keine Links enthalten, mit der man von der Start-Webseite zugreifen kann.
Hier ist der letzte Code, mit dem ich versucht habe, die URL als Bildschirmausgabe umzuwandeln. Datei heisst : "test.php".
-----------
<html>
C:\WINDOWS\Desktop\ ersetzen lassen.
<form method='post' action="test.php">
<input type='text' name="url_input">
<br>
<input type='submit' value='absenden'>
</form>
<?
$name = urldecode($url_input);
$urloutput3 = str_replace("WINDOWS","",$name);
$urloutput4 = str_replace("C:/","",$urloutput3);
$urloutput5 = str_replace("Desktop","",$urloutput4);
$urloutput6 = str_replace("ordner_2","",$urloutput5);
$urloutput7 = str_replace("'","/",$urloutput6);
$urloutput8 = str_replace("C:","",$urloutput7);
$urloutput9 = "www.test".".ch/".$urloutput8;
echo $urloutput9." ";
?>
</html>
---------
Wer kann mir helfen ?
MFG, und Dank im Voraus !
Hallo,
Folgendes : Ich möchte per Browserdatei eine kopierte URL in der Zwischenablage von z.B. "C:\WINDOWS\Desktop\Projekt_01\test.htm" per Knopfdruck in eine Web-URL umwandeln, die so aussieht :
das ist doch ganz einfach:
"www.test.ch/test.htm"
0. Entferne ggf. die Magic Quotes.
1. Finde die Position des letzten Backslashes in der Ausgangszeichenkette
strrpos()
2. Der Dateiname ist alles was dahinterkommt.
substr()
3. Setze "http://www.example.com/" davor.
.
Nutze das Handbuchkapitel Zeichenketten.
Freundliche Grüße
Vinzenz
Hallo !
Vielen Dank für die Antwort.
Trotzdem hat es nicht geklappt... Zwar verstehe ich, was man alles mit den Zeichenmanipulationen und den magic quotes anstellen kann, aber trotzdem hats nicht geklappt, und der verdammte Browser hat trotzdem immer wieder doppelte Schrägstriche (in welche Richtung auch immer) angezeigt.
Am Schluss habe ich mir gesagt : Jetzt reichts, dann machen wir halt eine Kompromisslösung. Ich habe noch die "Trim"-Funktion genommen und die Zeichenelimierung mit den URL-Regeln und RewriteRule in der .htaccess geändert. So funktionierts, aber warum jeder Browser wieder die ganze Sache anders interpretiert, und das Script nicht rafft, dass es den Schrägstrich wegmachen muss, habe ich nicht verstanden ! Versucht es doch selbst einmal !
PS : Ich will, dass auch folgende Dateistrukturen umgewandelt werden, und nicht nur einfach "eine Datei" !
Ihr habt mich also falsch verstanden, wenn ihr schreibt : "1. Finde die Position des letzten Backslashes in der Ausgangszeichenkette strrpos()".
Nur der Teil von "C:\WINDOWS\Desktop" muss durch z.B. "www.homepage.com" ersetzt werden, und wenn die Schrägstrich-Umwandlung geklappt hätte, hätte auch das vorige Script funktioniert.
Weitere Beispiele :
Etc.
Ich habe zwar noch folgendes, hilfreiches gefunden :
"Zwergnase : Deshalb meine - vielleicht zum 1.500 Mal gestellte - Frage :
Wie bekomme ich die Magic Quotes GPC auf ON umgestellt ?
Bei meinem Provider konnte ich es einschalten, indem ich in der .htaccess Datei folgende Zeile hinzugefügt habe:
php_flag magic_quotes_gpc on"
Quelle : http://www.joomlaportal.de/joomla-installation/20186-magic-quotes-gpc-off-wie-aendern.html
Also habe ich in meiner .htaccess-Datei noch folgende Einträge dazu gefügt, und den Rest meines Scriptes leicht geändert :
// php_flag magic_quotes_gpc off
// RewriteRule ^/$ / [R=301,L]
// RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]
// RewriteRule ^(.*[^/])\$ /$1/ [R=301,L]
Jetzt funktionierts, aber fragt mich nicht, warum es programmiertechnisch mit Java oder *rein* mit PHP gegangen ist !
Am Liebsten wäre mir gewesen, wenn Javascript das schon gekonnt hätte, aber im Zusammenhang eben mit dem Schrägstrich meldet der IE immer eine Fehlermeldung.
Gruss Andi
Hallo,
Trotzdem hat es nicht geklappt...
dann hast Du etwas falsch gemacht.
Zwar verstehe ich, was man alles mit den Zeichenmanipulationen und den magic quotes anstellen kann,
Du sollst die Magic Quotes deaktivieren, wenn möglich.
Ist das nicht möglich, dann musst Du als allererstes den Mist, den diese fabrizieren, rückgängig machen. Die Magic Quotes sind einfach Blödsinn und werden aus gutem Grund mit PHP6 verschwinden.
So funktionierts, aber warum jeder Browser wieder die ganze Sache anders interpretiert,
Den Browsern ist das völlig egal. Die bekommen HTML ausgeliefert.
Ihr habt mich also falsch verstanden, wenn ihr schreibt : "1. Finde die Position des letzten Backslashes in der Ausgangszeichenkette strrpos()".
Was heißt "falsch verstanden"? Du hast es ja nicht erklärt. Ich bin kein Hellseher.
Nur der Teil von "C:\WINDOWS\Desktop" muss durch z.B. "www.homepage.com" ersetzt werden, und wenn die Schrägstrich-Umwandlung geklappt hätte, hätte auch das vorige Script funktioniert.
- "C:\WINDOWS\Desktop\Projekt_01\test.htm"
- "C:\WINDOWS\Desktop\Projekt_02\akte_11\texte.htm"
- "C:\WINDOWS\Desktop\Projekt_01\akte_11\detail_05\bilder.htm"
Easy:
0. Deaktiviere die Auswirkungen der Magic Quotes, falls notwendig.
Du hast jetzt eine Zeichenkette mit einfachen Backslashes
1. Nimm die Teilzeichenkette ab dem Backslash hinter
C:\Windows\Desktop kommt.
2. Ersetze mit str_replace die Backslashes durch Slashes
3. Setze "http://www.example.com" davor.
"Zwergnase : Deshalb meine - vielleicht zum 1.500 Mal gestellte - Frage :
Wie bekomme ich die Magic Quotes GPC auf ON umgestellt ?
Wer will diese auf ON haben will, hat sie nicht verstanden. Wer sie verwendet, ist *** (zensiert).
Bei meinem Provider konnte ich es einschalten, indem ich in der .htaccess Datei folgende Zeile hinzugefügt habe:
php_flag magic_quotes_gpc on"
Schalte sie aus! Wenn Du etwas in eine MySQL-Datenbank schreiben willst, dann verwende die angemessene Behandlungsfunktion von PHP, das wären zum Beispiel mysql_real_escape_string() bzw. mysqli_real_escape_string. Noch besser wären Prepared Statements mit mysqli.
Du hast hier gar keinen SQL-Kontext, Du hast einen HTML-Kontext (und einen URL-Kontext).
Freundliche Grüße
Vinzenz
// 2. Ersetze mit str_replace die Backslashes durch Slashes.
Jep, das habe ich ja die ganze Zeit versucht zu machen ! Aber es funktioniert einfach nicht ! (oder nur teilweise).
Wahrscheinlich kann es daran liegen, dass die Schrägstriche maskiert sind, d.h., dass ein Zeichen ersetzt werden soll, das in Wahrheit ein anderes Aussehen hat. Oder die Zeichen sind per se irgendwie nicht änderbar, oder werden vom Browser immer wieder automatisch dazu gefügt. Ich stosse bei solchen Problemen immer wieder an unlogische oder historische Probleme.
1. Zu den rewrite-Befehlen bei Apache und .htaccess kenne ich mich nicht so fest aus; Hauptsache ich habe jetzt die Funktion hinbekommen, auch wenn es mit PHP alleine anscheinend nicht funktioniert hat. Klar sollte man nicht überall an allen möglichen Schrauben "rumschräubeln" können, wo es eigentlich keinen Sinn macht. Alle anderen Zeichen und Buchstaben gehen übrigens tip top mit "str_replace" weg, und ich rätsle noch immer, wie man den Schrägstrich schreibt : Etwa so ? "" , ”'" oder so ? '"' usw.
2. Warum müssen MS und Konsorten immer so eine Scheisse in der Dateihandhabung bauen ? Man nervt sich echt ab solch historischem Blödsinn. Z.B. ist bei Windows immer noch keine Fehlermeldung eingebaut, wenn Ordnerstrukturen ca. mehr als 256 Zeichen lang sind, d.h. eine Datei in mehreren Ordnern verschachtelt nicht mehr richtig als "Pfad" angegeben wird. Habe es schon öfters erlebt, dass dann diese Datei plötzlich in der obersten Struktur wieder aufgetaucht ist, dann aber mit irgendwelchem Buchstabensalat im Namen...
MFG Andi
Hallo Andi,
// 2. Ersetze mit str_replace die Backslashes durch Slashes.
Jep, das habe ich ja die ganze Zeit versucht zu machen ! Aber es funktioniert einfach nicht ! (oder nur teilweise).
und woher sollen wir wissen, was du probiert hast? Hast du immer noch den Code aus deinem ersten Posting?
<?
Verwende bitte die vollständigen Tags <?php anstatt der Kurzform, denn die short_open_tags sind bei vielen Hostern deaktiviert (aus gutem Grund, sie können Ärger machen, wenn man XML serverseitig verarbeiten möchte).
$name = urldecode($url_input);
$urloutput3 = str_replace("WINDOWS","",$name);
Für PHP: "Ersetze den String WINDOWS durch nichts, lösche ihn also."
$urloutput4 = str_replace("C:/","",$urloutput3);
Für PHP: "Ersetze den String C:/ durch nichts, lösche ihn also."
$urloutput5 = str_replace("Desktop","",$urloutput4);
Für PHP: "Ersetze den String Desktop durch nichts, lösche ihn also."
$urloutput6 = str_replace("ordner_2","",$urloutput5);
Für PHP: "Ersetze den String ordner_2 durch nichts, lösche ihn also."
$urloutput7 = str_replace("'","/",$urloutput6);
Für PHP: "Ersetze einfache Anführungszeichen ' durch Schrägstriche / ."
$urloutput8 = str_replace("C:","",$urloutput7);
Für PHP: "Ersetze den String C: durch nichts, lösche ihn also."
$urloutput9 = "www.test".".ch/".$urloutput8;
echo $urloutput9." ";
?>
Warum führst du eigentlich für jede Umwandlung eine neue Variable ein? Das macht's nur unnötig schwierig nachzuvollziehen. Ich frage mich auch, warum du ein paar wenige ausgewählte Verzeichnisnamen ("WINDOWS", "Desktop") aus dem Pfad entfernen willst.
Was würde die obige Kette aus Ersetzungen denn eigentlich produzieren:
C:\Windows\system32\kernel32.dll -> www.test.ch/\system32\kernel32.dll
E:\Profile\Martin\Desktop\Murphy's Law -> www.test.ch/E:\Profile\Martin\Murphy/s Law
Wahrscheinlich kann es daran liegen, dass die Schrägstriche maskiert sind, d.h., dass ein Zeichen ersetzt werden soll, das in Wahrheit ein anderes Aussehen hat. Oder die Zeichen sind per se irgendwie nicht änderbar, oder werden vom Browser immer wieder automatisch dazu gefügt. Ich stosse bei solchen Problemen immer wieder an unlogische oder historische Probleme.
Hä?? Ich glaube, du hast einfach das Prinzip der Maskierung von Sonderzeichen noch nicht verstanden. Steuerzeichen (also Zeichen mit Codes <0x20) und Anführungszeichen sind meist schwierig zu notieren, deshalb gibt es dafür sogenannte Escape-Sequenzen. So wird z.B. ein Tabulator als \t notiert und ein Zeilenvorschub als \n. Problematisch sind auch Anführungszeichen, wenn sie innerhalb von Strings auftreten, die ihrerseits in Anführungszeichen stehen - also stellt man den Anführungszeichen auch einen Backslash voran, um ihnen die Sonderbedeutung zu nehmen. Somit stehen ' und " also für einfache und doppelte Anführungszeichen, die exakt so im String stehen sollen. Schließlich muss man auch den Backslash maskieren, damit er diese Sonderbedeutung als Escape-Zeichen nicht mehr hat, er wird also als \ geschrieben.
- Warum müssen MS und Konsorten immer so eine Scheisse in der Dateihandhabung bauen ? Man nervt sich echt ab solch historischem Blödsinn.
Zum Beispiel?
Z.B. ist bei Windows immer noch keine Fehlermeldung eingebaut, wenn Ordnerstrukturen ca. mehr als 256 Zeichen lang sind, d.h. eine Datei in mehreren Ordnern verschachtelt nicht mehr richtig als "Pfad" angegeben wird.
Hä?
Habe es schon öfters erlebt, dass dann diese Datei plötzlich in der obersten Struktur wieder aufgetaucht ist, dann aber mit irgendwelchem Buchstabensalat im Namen...
Dann ist bei dir irgendein Unfall passiert, der mit dem eigentlichen Problem nichts zu tun hatte. Normal ist, dass Windows hemmungslos derart lange Pfade erzeugt, ohne zu warnen - soweit stimme ich dir zu. Lästig ist auch, dass man die dann nur noch mühsam nutzen und/oder wieder löschen kann, weil weder der Explorer noch die Konsole mit Pfadnamen >256 Zeichen ordentlich umgehen können. Windows selbst macht damit aber in der Regel keine Zicken, das Dateisystem bleibt trotzdem intakt.
Schönen Sonntag noch,
Martin
PS: Du plenkst!
"Was ist Plenken : Im Gegensatz zum Deutschen und Englischen ist im Französischen die Verwendung eines Leerzeichens vor Fragezeichen (?), Ausrufezeichen (!),
Doppelpunkt (:) und Semikolon (;) im Schriftsatz vorgeschrieben. Außerdem steht hier nach öffnenden («) und vor schließenden (»)
Anführungszeichen >>(guillemets) ein Leerzeichen. Diese Regel gilt auch bei Kombinationen von Satzzeichen: « Quoi ? »"
Stimmt, ich plenke gerne, weil ich es grafisch schöner finde, und ich schreibe auch gerne mehr Kommas in Sätze, die eigentlich nicht dort hingehören, aber vom Lesen her aus meiner Sicht besser passen, besser formatieren oder den Gedankenfluss lenken - Auf Zeichenhickhack im "Sprachlichen" pfeife ich, jedoch nicht beim Programmieren, wenn ich denn einmal programmiere.
Hä?? Ich glaube, du hast einfach das Prinzip der Maskierung von Sonderzeichen noch nicht verstanden.
Richtig, aber es wird auch nirgend genau beschrieben, wie die Steuerzeichen verwendet werden müssen. Ich google ja schon seit ein paar Jahren, aber diese Antwort ist wirklich gut, weil sie von einem Insider stammt, der mit sowas auch öfters arbeitet : Danke !
Schließlich muss man auch den Backslash maskieren, damit er diese Sonderbedeutung als Escape-Zeichen nicht mehr hat, er wird also als \
geschrieben.
Ja, danke, die Anspielung auf Murphys Gesetz hätte nicht unbedingt noch sein müssen ! ;) Murphy kenne ich schon aus dem Alltag genug, wenn z.B. der Wecker und der Ersatzwecker gleichzeitig den Geist aufgeben...
"Verzeichnis\Murphy's Law"
- Warum müssen MS und Konsorten immer so eine Scheisse in der Dateihandhabung bauen ? Man nervt sich echt ab solch historischem Blödsinn.
Zum Beispiel?
Na ja, Browserkrieg, trotzige Reaktionen auf innovative Firmen, indem durch Backengineering einfach das Gleiche mit anderen Methoden implementiert wird, oder die "Extrastandards", die MS mit einer Ersatzsprache für Java versuchte zu etablieren, Dutzende von verschissenen Programmlösungen, oder Programme, die genau gleiche Version haben, aber auf dem Mac und Windows untersch. funktionieren oder darstellen, usw....
Oder nur schon die Methode, es "immer besser zu wissen, besser machen" zu wollen, usw.
Super, mit deiner Angabe hats endlich geklappt ! Ich weiss auch nicht, woher ich die Info genommen habe, dass der Schrägstrich angeblich anders geschrieben wird... War wohl eine Falschinformation.
Natürlich habe ich so viele Variablen nur eingeführt, um zu debuggen, und den Fehler zu suchen, den ich nicht verstanden habe !
Thanks !
Habe es schon öfters erlebt, dass dann diese Datei plötzlich in der obersten Struktur wieder aufgetaucht ist, dann aber mit irgendwelchem
Buchstabensalat im Namen...
Dann ist bei dir irgendein Unfall passiert, der mit dem eigentlichen Problem nichts zu tun hatte. Normal ist, dass Windows hemmungslos derart lange Pfade erzeugt, ohne zu warnen - soweit stimme ich dir zu. Lästig ist auch, dass man die dann nur noch mühsam nutzen und/oder wieder löschen kann, weil weder der Explorer noch die Konsole mit Pfadnamen >256 Zeichen ordentlich umgehen können. Windows selbst macht damit aber in der Regel keine Zicken, das Dateisystem bleibt trotzdem intakt.
Ja, habe folgendes gehabt : Wollte ein Verzeichnis mit mehreren Hundert Dateien und Ordnern in einem weiteren Ordner verschachteln, oder auf CD brennen. Klappte auch, aber am Schluss zeigte sich, dass ein paar Dateien es nicht bis ins tiefste Verzeichnis geschafft hatten. Das ist nur eine Möglichkeit, wie ich das Ganze schon mal erlebt habe. Aber mich stört, dass niemand von den Leuten, die so ein OS programmieren, an eine Fehlerroutine denken, die dem Benutzer eine Warnmeldung oder so einblendet, oder dass solche Vorgänge nicht schon von Anfang an unterbunden werden. Natürlich lassen sich die Verzeichnisse wieder mit M-Scan reparieren und ins Stammverzeichnis schiffen, wenn diese "blockiert" sind, und nicht mehr verschoben werden können. Die Dateien sind immer erhalten, müssen aber immer wieder mühsam richtig umbenannt werden, weil immer ein Teil des Dateinamens abgeschnitten wird. Was kann ich dafür, dass meine Dok-Projekte halt mit vielen Ordnern und Untergruppierungen auskommen müssen, und ich explz. nicht auf Unordnung stehe ?
Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
Viel schlimmer ist, wenn man als Aussenminister der USA z.B. gar keinen Schulabschluss braucht !!!....
Link