[1.16] tools/filesystem

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [1.16] tools/filesystem

Beitrag von dr.e. » 10.08.2012, 16:50:01

Ich meinte letzteres. Wobei ein open() ja nur dann notwendig ist, wenn ich das File auch bearbeiten/locken möchte. Im Fall der Parametrisierung eines Service geht es ja erstmal um den Namen/den Pfad.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 13.08.2012, 17:26:17

Frage für mich:

Wenn wir auf das neue FileSystem umstellen, müssen ja auch sämtliche Erweiterungen etc. die das auch nutzen, angepasst werden. Also wird es bestimmt erstmal noch beide Komponenten (neu und alt) für 1.16 geben, richtig?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [1.16] tools/filesystem

Beitrag von dr.e. » 13.08.2012, 21:11:31

Hallo dave,

ich habe mir die Implementierung angesehen und finde sie gut. Einige Punkte habe ich optimiert (z.B. Code-Formattierung, Kommentare). Ferner sollten wir für

Code: Alles auswählen

mkdir($path, 0770, true);  
noch eine Konfigurationsmöglichkeit hinsichtlich der Filemask einführen. Hierzu gibt es jedoch einen potentiellen Bug in PHP, der in FilesystemManager::createFolder() umgangen wurde. Vielleicht kannst du das gleich übernehmen.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [1.16] tools/filesystem

Beitrag von dr.e. » 13.08.2012, 21:13:17

Hello again,

die Nutzungsstellen sollten mit 1.16 angepasst werden. Wie du vorgeschlagen hast, können wir den FilesystemManager für 1.16 gerne deprecated setzen und in 1.17 entfernen.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 14.08.2012, 16:36:49

dr.e. hat geschrieben:Hallo dave,

ich habe mir die Implementierung angesehen und finde sie gut. Einige Punkte habe ich optimiert (z.B. Code-Formattierung, Kommentare). Ferner sollten wir für

Code: Alles auswählen

mkdir($path, 0770, true);  
noch eine Konfigurationsmöglichkeit hinsichtlich der Filemask einführen. Hierzu gibt es jedoch einen potentiellen Bug in PHP, der in FilesystemManager::createFolder() umgangen wurde. Vielleicht kannst du das gleich übernehmen.
Hi Christian,
ich finde die Implementierung auch sehr gelungen! Sehr übersichtlich, praktisch und einfach verständlich. Ich habe den Bugfix aus dem FilesystemManager in die neue Klasse Folder übernommen und das ganze bereits eingecheckt.

Ich werde nun den MultiFileUpload auf die neuen File und Folder Klassen umbauen und das ganze testen.


[EDIT]
Mir fehlen noch zwei interessante Methoden, um einen Zeitstempel für das Bearbeiten von Dateien zurück zu liefern. Diese habe ich lokal in der Klasse File bereist getestet:

Code: Alles auswählen

   /**
    * @public
    * 
    * @param   boolean $timestamp If true, this method returns unformatted timestamp (optional)
    * @return  string
    * 
    * @author  dave
    * @version Version 0.1, 14.08.2012
    */
   public function getModificationDate($timestamp = false) {
      clearstatcache();
      
      $file = $this->getPath();
      $modDate = filemtime($file);
      if($timestamp === false) {
         return date('Y-m-d', $modDate);
      }else{
         return $modDate;
      }
   }

   /**
    * @public
    * 
    * @param   boolean $timestamp If true, this method returns unformatted timestamp (optional)
    * @return  string
    * 
    * @author  dave
    * @version Version 0.1, 14.08.2012
    */
   public function getModificationTime($timestamp = false) {
      clearstatcache();
      
      $file = $this->getPath();
      $modTime = filemtime($file);
      if($timestamp === false) {
         return date('H:i:s', $modTime);
      }else{
         return $modTime;
      }
   } 
Über timestamp = false lässt sich die Rückgabe steuern: Formatiert mit date() als als reiner Timestamp.

Für Verzeichnisse liefert die php-Funktion filemtime übrigens je nach Betriebssystem unterschiedliche Daten zurück. Daher verzichte ich bei der Folder-Klasse auf die beiden Methoden.


Ich hätte da auch noch einen Vorschlag. Die Klasse kümmert sich, wie der FilesystemManager auch komplett um einen Upload. Die Umsetzung würde sich auch nicht so schwierig gestalten. Würde einen ensürechenden Vorschlag noch nachreichen.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [1.16] tools/filesystem

Beitrag von Megger » 15.08.2012, 08:25:06

Wären da nicht auch Stunden, Minuten und Sekunden interessant bei der Datumsformatierung?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 15.08.2012, 15:42:11

Megger hat geschrieben:Wären da nicht auch Stunden, Minuten und Sekunden interessant bei der Datumsformatierung?
getModificationTime würde sich dann dafür anbieten. Die Methode gibts direkt hinten dran.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [1.16] tools/filesystem

Beitrag von dr.e. » 15.08.2012, 19:18:55

Hallo dave,
Ich habe den Bugfix aus dem FilesystemManager in die neue Klasse Folder übernommen und das ganze bereits eingecheckt.
Perfekt! :)
Ich werde nun den MultiFileUpload auf die neuen File und Folder Klassen umbauen und das ganze testen.
Sehr schön, danke! Dann brauchen wir nur noch Freiwillige für
  • GORM-Domänen-Objekt-Generator
  • modules::newspager
  • TextCacheProvider
  • AdvancedTextCacheProvider
Ich könnte die letzen beiden übernehmen.
Mir fehlen noch zwei interessante Methoden, um einen Zeitstempel für das Bearbeiten von Dateien zurück zu liefern. Diese habe ich lokal in der Klasse File bereist getestet:
Wie wäre es mit

Code: Alles auswählen

/**
 * @return DateTime
 */
public function getModificationTime();

/**
 * @return DateTime
 */
public function getCreationTime(); 
Dann kann sich jeder die Ausgabe so formatieren wie er gerne möchte. Z.B.

Code: Alles auswählen

echo $folder->getCreationTime()->format('d.m.Y H:i '); 
Für Verzeichnisse liefert die php-Funktion filemtime übrigens je nach Betriebssystem unterschiedliche Daten zurück. Daher verzichte ich bei der Folder-Klasse auf die beiden Methoden.
Das ist eine alte Geschichte - richtig. Da eine Software jedoch zumeist konstant unter LINUX betrieben wird würde ich schon beide (creation time, modification time) anbieten. Dann ist die API zumindest vollständig und kann bei getModificationTime() ja einen entsprechenden Code-Kommentar beinhalten, der auf dieses "Problem" und vielleicht auch gleich die PHP-Doku verweist.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 15.08.2012, 20:47:50

Ein Freiwilliger für

• modules::newspager

ist schnell gefunden. Das übernehme ich, sieht auf den ersten Blick unkompliziert aus ;) Nach problemloser "Übersetzung" checke ich das sofort ein.

Dein Vorschlag mit

Code: Alles auswählen

echo $folder->getCreationTime()->format('d.m.Y H:i'); 
gefällt mir und sieht interessant aus. Nur mir ist noch nicht ganz bewusst, wie ich die Methode format abhängig von getCreationTime oder getModificationTime machen kann. Morgen fällt mir dazu aber sicher was ein. Ich bin dran :)

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von TipTop » 15.08.2012, 22:07:49

Guten Abend,
dave hat geschrieben:Nur mir ist noch nicht ganz bewusst, wie ich die Methode format abhängig von getCreationTime oder getModificationTime machen kann. Morgen fällt mir dazu aber sicher was ein. Ich bin dran :)
format() ist eine Methode von DateTime - in getCreationTime() und getModificationTime() also einfach eine DateTime-Instanz zurückgeben.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 16.08.2012, 18:13:16

Danke für den Anstupser!

Doch ganz so einfach war es doch nicht, denn filemtime/filectime gibt stehts einen Unix-Timestamp zurück. Dieser muss dann erst wieder formatiert werden, wmoit DateTime dann arbeiten kann. Dafür gibt es aber glücklicherweise die Methode setTimestamp($Timestamp).

Allerdings ist diese Methode erst am PHP Version 5.3.0 verfügbar. Ich eiere mit meinem System noch auf Version 5.2.x rum, sodass mir das aufgefallen ist. Es gibt allerdings einen Weg, das auch für Version 5.2 nutzbar zu machen.

So siehts aus: Anfangs wird überprüft, ob die Methode setTimestamp() verfügbar ist und je nachdem wird dann der Stempel modifiziert

Code: Alles auswählen

   /**
    *
    * @public
    * 
    * DateTime::setTimestamp is only available since PHP Version 5.3.0
    * First, we check if the method is available, otherwise we use an alternative for PHP 5.2.0
    * Check also documentation: http://de.php.net/manual/en/datetime.settimestamp.php 
    * 
    * Please keep in mind that there is no way for a creation time of a file in most Unix filesystems.
    * filectime returns also a new timestamop when owner or rights of the file has been changed!
    * Check also documentation: http://de.php.net/manual/en/function.filectime.php
    * 
    * @return  DateTime The creation time as a DateTime-Instance of the file
    * 
    * @author  dave
    * @version Version 0.1, 16.08.2012
    */
   public function getCreationTime() {

      clearstatcache();

      $DateTime = new DateTime();

      if (!method_exists($DateTime, 'setTimestamp')) {
         $Timestamp = filectime($this->getPath());
         return new DateTime("@$Timestamp");
      } else {
         return $DateTime->setTimestamp(filectime($this->getPath()));
      }
   }

   /**
    *
    * @public
    * 
    * DateTime::setTimestamp is only available since PHP Version 5.3.0
    * First, we check if the method is available, otherwise we use an alternative for PHP 5.2.0
    * Check also documentation: http://de.php.net/manual/en/datetime.settimestamp.php 
    * 
    * Please keep in mind that time resolution may differ from one file system to another.
    * Check also documentation: http://de.php.net/manual/en/function.filemtime.php
    * 
    * @return  DateTime The modification time as a DateTime-Instance of the file
    * 
    * @author  dave
    * @version Version 0.1, 16.08.2012
    */
   public function getModificationTime() {

      clearstatcache();

      $DateTime = new DateTime();

      if (!method_exists($DateTime, 'setTimestamp')) {
         $Timestamp = filemtime($this->getPath());
         return new DateTime("@$Timestamp");
      } else {
         return $DateTime->setTimestamp(filemtime($this->getPath()));
      }
   } 
Die Anpassung habe ich übrigens in der FilesystemItem.php vorgenommen. Somit gelten die beiden neuen Methoden für File sowie Folder ja gleichzeitig, korrekt?
Methoden sind gecheckt und einsatzbereit ;)

Ein Aufruf ist dann wie folgt möglich:

Code: Alles auswählen

echo $folder->getCreationTime()->format('d.m.Y H:i'); 

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von TipTop » 16.08.2012, 19:21:46

dave hat geschrieben: Die Anpassung habe ich übrigens in der FilesystemItem.php vorgenommen. Somit gelten die beiden neuen Methoden für File sowie Folder ja gleichzeitig, korrekt?
Methoden sind gecheckt und einsatzbereit ;)

Ein Aufruf ist dann wie folgt möglich:

Code: Alles auswählen

echo $folder->getCreationTime()->format('d.m.Y H:i'); 
Sehr schön. :)

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 16.08.2012, 20:21:34

Ok, den checkin mache ich nachher.

[EDIT]
Ist eingecheckt und verfügbar! :)

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [1.16] tools/filesystem

Beitrag von dave » 17.08.2012, 16:07:15

Hi zusammen,

ich habe modules::newspager nun auch angepasst. Ist im Grunde nur eine Zeile, es gibt aber noch Optimierungspotenzial. Hat jemand ein kleines Package, mit dem ich dann einen anschliessenden Test fahren kann? Ungetestet möchte ich das ungern einstellen.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [1.16] tools/filesystem

Beitrag von dr.e. » 17.08.2012, 18:47:30

Hi dave,

kannst du nicht die Sandbox nutzen?
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast