php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 20-01-2009, 21:51
Jeremias
 Newbie
Links : Onlinestatus : Jeremias ist offline
Registriert seit: Jan 2009
Beiträge: 8
Jeremias ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das heisst du glaubst mir das ich ein problem habe und jetzt suchen wir noch eine Lösung
Mit Zitat antworten
  #17 (permalink)  
Alt 20-01-2009, 22:07
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von Jeremias
Das heisst du glaubst mir das ich ein problem habe ...
Yep. ;-)
Und zwar ein eher großes Problem.

Zitat:
... und jetzt suchen wir noch eine Lösung
... und das wird schwierig werden, weil es von den Bogus-Flaggern unter den PHP-Entwicklern nicht als Problem gesehen wird. Irgendwie ist das mal wieder typisch für diesen Klempnerladen:

Zitat:
There are already feature requests for this. This is not a bug but
missing feature. And this missing feature will be in PHP 6.
(Quelle -- übrigens mit sehr sauberer Problembeschreibung)

Als Lösungsvorschläge hätte ich erstmal nur Perl, Python oder eine andere professionelle Script-Umgebung.

Geändert von fireweasel (20-01-2009 um 22:11 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 20-01-2009, 23:27
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Scheint ja nur unter Windows-Systemen fehlerhaft zu sein, dann geht es ja grad noch. Ich wollte gerade vorschlagen, einfach über exec und dir etwas passendes nachzubauen, aber die Ausgabe von dir im Terminal ist genauso fehlerhaft. Sieht schlecht aus.
Mit Zitat antworten
  #19 (permalink)  
Alt 21-01-2009, 00:20
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Prinzipiell sollte man Sonderzeichen in Dateinamen überhaupt nicht verwenden bzw. beim Upload von Dateien einfach nicht zulassen oder automatisch eliminieren.

Vor allem unter Windows stößt man damit ständig auf Probleme und auch unter Linux können Sonderzeichen Schwierigkeiten machen. Und das jetzt völlig unabhängig von PHP.
Mit Zitat antworten
  #20 (permalink)  
Alt 21-01-2009, 00:51
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von PHP-Desaster
Scheint ja nur unter Windows-Systemen fehlerhaft zu sein, dann geht es ja grad noch. Ich wollte gerade vorschlagen, einfach über exec und dir etwas passendes nachzubauen, aber die Ausgabe von dir im Terminal ist genauso fehlerhaft. Sieht schlecht aus.
Yep. Eben ausprobiert. Allerhöchstens über die 8.3-Namen könnte man vielleicht rankommen.
Dass "dir /B pfad" in der Kommandozeile bei Nicht-ISO-8859-1-Zeichen nur Fragezeichen ausgibt, ist aber auch schon eine Meisterleistung. ;-) Ist mir bisher noch nie aufgefallen.

Wenn man das CLI mit "cmd /U" startet, werden die Zeichen übrigens richtig dargestellt. Vielleicht kann man das ja einer der PHP-Exec-Funktionen beibiegen?

Ich hab mich jetzt noch auf die Suche nach Win32API-Extensions für PHP begeben. Damit hätte man ja notfalls opendir(), readdir() und closedir() nachbauen könne. Aber Fehlanzeige:

* WinBinder kennt keine Verzeichnisfunktionen
* w32api wird nicht mehr unterstützt (gabs wohl nur für PHP4)
* winstd kann ebenfalls keine Verzeichnisfunktionen

Eine Idee hätte ich noch -- aber da muss ich noch ein wenig "recherieren" (wird heute nichts mehr).

Zitat:
Prinzipiell sollte man Sonderzeichen in Dateinamen überhaupt nicht verwenden bzw. beim Upload von Dateien einfach nicht zulassen oder automatisch eliminieren.
Sonderzeichen? Warum sollten Russen, Ukrainer, Bulgaren, Serben, Mazedonier, Griechen u.w.w.i.w.n.a[1] nicht ihre Dateien mit ihren Buchstaben benennen können? Nur weil 'n paar engstirnige Windoze|*nix|PHP-Code-Klempner sich nicht vorstellen können, dass es außerhalb von ASCII auch noch andere Zeichen auf der Welt gibt? Deutsche Umlaute gehen ja schließlich auch. Wir haben 2009 und nicht 1969, und UTF-8 gibts seit reichlich 10 Jahren. Es geht auch nicht ums Verarbeiten, sondern nur ums "Durchreichen" von Unicode-Zeichen.

--
[1] und was weiß ich, wer noch alles

----

Mahlzeit! ;-)

Zumindest das Auflisten der Verzeichniseinträge funktioniert:

PHP-Code:
/// return list of directory entries
function dir_scan_unicode(
  
$path NULL /// path to directory
) {
  if (!
is_dir($path)) {
    return 
FALSE;
  }
  
// entfernen|umbauen, worueber DIR stolpern koennte:
  
$path preg_replace(
      
'/(?:\Afile:\/\/(localhost)?\/|\/)/Se',
      
'strlen("$0") > 1 ? "" : "\x5c"',
      
$path
  
);

  
// fuer CMD:
  //   /U Umstellen der Ausgabe auf UTF-16LE
  //   /C nach Aufruf des folgenden Kommandos sofort zurueckkehren
  // fuer DIR:
  //   /B nur "long file names" anzeigen
  //   /C nach Aufruf des folgenden Kommandos sofort zurueckkehren
  // fuer DIR:
  //   /B nur "long file names" anzeigen
  
exec('cmd /U /C dir ' cmd_escape($path). ' /B'$lines$return_val);

  if (
!== $return_val) { // 0 means success
    
return FALSE;
  }
  foreach (
$lines as $line_key => $line) {
    
//* konvertiert UTF-16LE nach UTF-8
    //
    
$lines[$line_key] = mb_convert_encoding(
        (
strlen($line) & 1) ? substr($line1, -2) : substr($line0, -2),
        
'UTF-8',    // from encoding
        
'UTF-16LE'  // to encoding
    
);
    
//*/

    /* konvertiert UTF-16LE nach HTML-ASCII + NCR (&#dec-zahl;)
    // Fuer die testweise Ausgabe (u.A. im Browser)
    $codepoints = unpack(
        'v*',
        (strlen($line) & 1) ? substr($line, 1, -2) : substr($line, 0, -2)
    );
    foreach ($codepoints as $cp_key => $codepoint) {
      $codepoints[$cp_key] = $codepoint > 127
          ? sprintf('&#%d;', $codepoint)
          : chr($codepoint);
    }
    $lines[$line_key] = implode($codepoints);
    //*/

    // Leerzeilen entfernen (eigentlich nur die letzte)
    
if (!isset($lines[$line_key][0])) {
      unset(
$lines[$line_key]);
    }
  }
  return 
$lines;
}

// um Code-Injections zu verhindern
// escapeshellcmd() funktioniert nicht wie erwartet
function cmd_escape(
  
$path NULL
) {
  
// implementation left to you as an exercise ;-)
  
return $path;
}

// getestete Pfade:
$path 'f:\\test\\php-resource\\cyrillic-filename';
$path 'f:\test\php-resource\cyrillic-filename';
$path 'f:/test/php-resource/cyrillic-filename';
$path 'file:///f:/test/php-resource/cyrillic-filename';
$path 'file://localhost/f:/test/php-resource/cyrillic-filename';

foreach (
$entries as $entry) {
  echo 
'<br />'$entry'';


Geändert von fireweasel (21-01-2009 um 12:00 Uhr)
Mit Zitat antworten
  #21 (permalink)  
Alt 21-01-2009, 11:55
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von fireweasel
Sonderzeichen? Warum sollten Russen, Ukrainer, Bulgaren, Serben, Mazedonier, Griechen u.w.w.i.w.n.a[1] nicht ihre Dateien mit ihren Buchstaben benennen können? Nur weil 'n paar engstirnige Windoze|*nix|PHP-Code-Klempner sich nicht vorstellen können, dass es außerhalb von ASCII auch noch andere Zeichen auf der Welt gibt?
Was verwendest du, wenn es offenbar kein Windows oder *nix ist?

Und wozu brauchen Dateien, die auf einem Server gespeichert werden, Sonderzeichen? Die Dateinamen werden vernünftigerweise in die Datenbank geschrieben und die echten Dateinamen sind einfach serialisierte Nummern oder ähnliches, um eben genau solchen Problemen (und anderen) aus dem Weg zu gehen.

Es gibt immer wieder Programm oder Skripte, die Probleme mit extravaganten Sonderzeichen haben. Und was machst du, wenn du auf diese angewiesen bist?
Mit Zitat antworten
  #22 (permalink)  
Alt 21-01-2009, 12:28
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von h3ll
Und wozu brauchen Dateien, die auf einem Server gespeichert werden, Sonderzeichen?
Es sprach auch niemand von Hochladen oder Speichern auf einem (Web-)Server. Es ging um simples Auflisten der Einträge eines Verzeichnisses mit Hilfe der Script-Sprache PHP -- nix CGI, nix Apache-Modul. Du vaschtähn, товарищ? ;-)

Nochmal: Es handelt sich um Buchstaben und nicht um Sonderzeichen. Nur weil manche Leute die nicht in der Grundschule kennengelernt haben, heißt das nicht, dass sie nicht existieren oder irgendwas "Besonderes" darstellen.

Zitat:
Es gibt immer wieder Programm oder Skripte, die Probleme mit extravaganten Sonderzeichen haben.
"extravagante Sonderzeichen"?
*facepalm*
Hast du schon mal was von Unicode gehört? Für ein paar Hundert Millionen Menschen sind das ganz gewöhnliche Buchstaben ...

Zitat:
Und was machst du, wenn du auf diese angewiesen bist?
Zu einer Programmierumgebung wechseln, die damit umgehen kann. Die Betriebssysteme der Windows-NT-Familie können (seit Jahren) mit solchen Pfaden umgehen, da sollte man erwarten können, dass darauf aufsetzende Layer diese Fähigkeiten zumindest durchreichen können.
Mit Zitat antworten
  #23 (permalink)  
Alt 21-01-2009, 14:59
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

Alles was mehr als 7, bzw. 8 Bit benötigt(und als Bitcode für einen Buchstaben benutzt wird), wird in der Informatik sehr oft als Sonderzeichen bezeichnet.
Da ein grosser Teil der Informatik in Ländern mit einem Lateinischen Alphabet seinen Anfang nahm wurden die ersten 127(255) Zeichen schon sehr früh von ihnen beansprucht, sprich alle in Folge hinzugefügten Zeichen wurden/werden als Sonderzeichen betrachtet.
Wieviele Menschen diese Zeichen benutzen oder wieviele von diesen Zeichen es gibt spielt dabei keine Rolle.
Mit Zitat antworten
  #24 (permalink)  
Alt 21-01-2009, 18:32
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von fireweasel
Es sprach auch niemand von Hochladen oder Speichern auf einem (Web-)Server. Es ging um simples Auflisten der Einträge eines Verzeichnisses mit Hilfe der Script-Sprache PHP -- nix CGI, nix Apache-Modul. Du vaschtähn, товарищ? ;-)

Nochmal: Es handelt sich um Buchstaben und nicht um Sonderzeichen. Nur weil manche Leute die nicht in der Grundschule kennengelernt haben, heißt das nicht, dass sie nicht existieren oder irgendwas "Besonderes" darstellen.
In der Informatik sind sie was besonderes, auch wenn man das in manchen Grundschulen nicht lernt.

Zitat:
Original geschrieben von fireweasel
"extravagante Sonderzeichen"?
*facepalm*
Hast du schon mal was von Unicode gehört? Für ein paar Hundert Millionen Menschen sind das ganz gewöhnliche Buchstaben ...
Dem Computer sind die paar hundert Millionen Menschen aber sch***egal. Der rechnet immer noch mit Bits und Bytes, und nicht mit Buchstaben.

Zitat:
Original geschrieben von fireweasel
Zu einer Programmierumgebung wechseln, die damit umgehen kann. Die Betriebssysteme der Windows-NT-Familie können (seit Jahren) mit solchen Pfaden umgehen, da sollte man erwarten können, dass darauf aufsetzende Layer diese Fähigkeiten zumindest durchreichen können.
Wie gesagt gibts immer wieder Programme, die das eben nicht können. Und lieber gleich dafür sorgen, dass alles möglichst kompatibel gehalten wird, als irgendwann später draufkommen, dass es zu Problemen kommt und man alles wieder umändern muss.

Was Computer können und was Menschen können sind oft ein unterschiedliches paar Schuhe. Versuch zB. mal unter Windows in Notepad eine Datei mit dem Namen "con.txt" abzuspeichern...

Ein anderes Problem ist die Groß-/Kleinschreibenung. Für jeden Menschen ist klar, dass 'A' was anderes als 'a' ist. Warum sollte man also nicht eine Datei 'baum.doc' und eine andere Datei 'Baum.doc' im selben Verzeichnis abspeichern können? Sind ja unterschiedliche Buchstaben. Tja, nur blöd, dass das Windows anders sieht.
Mit Zitat antworten
  #25 (permalink)  
Alt 26-01-2009, 18:16
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

So, bevor ich jetzt auf die "Informatik(er)"-Argumente eingehe und sie in der Luft zerreiße [1] ...
... es geht. Ich habe ein Script zusammengeschraubt, das mit Unicode-Buchstaben in Pfaden umgehen kann. Der PHP-Teil kommt sogar ohne Multibyte-Erweiterung oder ähnlichen Kram aus -- das war auch eigentlich nie nötig, es muss ja nur UTF-8 "durchgeschleift" werden. Aber sag das mal einer den PHP-Entwicklern.

Die Realisierung bleibt allerdings auf WindozeXP (und kompatible[3]) beschränkt. Ein wichtiger Grund dafür ist, dass das Bearbeiten von Dateien mit solchen Pfaden über fopen(), fread() etc. möglich sein soll. Diese Funktionen können aber wie die Verzeichnis-Funktionen nicht mit Unicode-Teil-Pfaden umgehen. NTFS unter Windows ermöglicht aber das Verwenden von "kurzen Pfad(nam)en" in der antiken 8.3-Notation -- mit denen kann auch PHP.

Jetzt warte ich noch auf jemand, der das auch für Pinguin-Systeme hinbiegt.

Ich muss das Ganze nur noch in eine Form[2] bringen, die man auch veröffentlichen kann.

--
[1] War nur Spaß. ;-)
[2] Eine PHP-Klasse.
[3] Rein theoretisch müsste sogar Windoze95 mit installiertem Unicode-Layer funktionieren.

Geändert von fireweasel (26-01-2009 um 18:26 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:43 Uhr.