{"id":554,"date":"2011-03-31T23:46:21","date_gmt":"2011-03-31T21:46:21","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=554"},"modified":"2011-04-01T20:18:50","modified_gmt":"2011-04-01T18:18:50","slug":"3-nuetzliche-unbekannte-php-funktionen","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/3-nuetzliche-unbekannte-php-funktionen\/","title":{"rendered":"3 n\u00fctzliche unbekannte PHP Funktionen"},"content":{"rendered":"<p>Ich hasse ja pers\u00f6nlich Artikel wie diesen (313373 PHP Speed Optimization Tweeks you can not live without &#8230; <i>g\u00e4\u00e4hn<\/i>). Aber beenden wir das Selbstbashing und kommen zum Punkt.<\/p>\n<h2><a href=\"http:\/\/php.net\/manual\/de\/function.stream-resolve-include-path.php\">stream_resolve_include_path<\/a> (php >= 5.3.2)<\/h2>\n<p>\nManchmal kann es n\u00fctzlich sein zu wissen, wo genau sich eine includete Datei versteckt. Der include_path macht es einem da ja oft nicht einfach.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nvar_dump(stream_resolve_include_path(&quot;fpdf\/fpdf.php&quot;));\r\n\/\/string(31) &quot;D:\\xampp\\php\\PEAR\\fpdf\\fpdf.php&quot;\r\n<\/pre>\n<\/p>\n<h2><a href=\"http:\/\/de2.php.net\/manual\/de\/datetime.createfromformat.php\">DateTime::createFromFormat<\/a> (php >= 5.3.0)<\/h2>\n<p>\nZum &#8222;entwirren&#8220; von Zeitangaben gehe ich gerne den Weg \u00fcber <a href=\"http:\/\/php.net\/manual\/de\/function.strtotime.php\">strtotime<\/a> und date. Etwa so:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\necho date(&quot;d.m.Y H:i:s&quot;, strtotime(&quot;Mon, 15 Aug 2005 15:12:46 UTC&quot;));\r\n\/\/15.08.2005 17:12:46\r\n<\/pre>\n<p>Das mag noch gehen, da wir ein Datum nach RFC822 in strtotime hereingesteckt haben, mit dem es umgehen kann. Haben wir jetzt allerdings eine Datumsangabe der Abart <b>Monday 8th of August 2005 at 03:12:46 PM<\/b> kommen wir nicht so einfach davon. Hier schafft <i>DateTime::createFromFormat<\/i> Abhilfe:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$date = DateTime::createFromFormat(&#039;l jS \\of F Y \\a\\t h:i:s A&#039;, &#039;Monday 8th of August 2005 at 03:12:46 PM&#039;);\r\necho $date-&gt;format(&#039;d.m.Y H:i:s&#039;); \r\n\/\/08.08.2005 15:12:46\r\n<\/pre>\n<\/p>\n<h2><a href=\"http:\/\/de2.php.net\/manual\/de\/function.finfo-open.php\">finfo<\/a> (php >= 5.3.0)<\/h2>\n<p>\nWar <a href=\"http:\/\/pecl.php.net\/package\/Fileinfo\">fr\u00fcher ein PECL-Paket<\/a>. Macht genau das, was man von einer Klasse erwartet, die sich <i>fileinfo<\/i> nennt:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n$finfo = new finfo();\r\n$file = &quot;D:\/xampp\/htdocs\/zipfile.zip&quot;;\r\nprint $finfo-&gt;file($file, FILEINFO_MIME) . &quot;\\r\\n&quot;;\r\nprint $finfo-&gt;file($file, FILEINFO_MIME_TYPE) . &quot;\\r\\n&quot;;\r\nprint $finfo-&gt;file($file, FILEINFO_MIME_ENCODING) . &quot;\\r\\n&quot;;\r\n<\/pre>\n<p>Erzeugt folgenden Output:<\/p>\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">\r\napplication\/zip; charset=binary\r\napplication\/zip\r\nbinary\r\n<\/pre>\n<p>Eine Auflistung der Konstanten <a href=\"http:\/\/www.php.net\/manual\/de\/fileinfo.constants.php\">findet sich hier<\/a>.\n<\/p>\n<h2>Ein inkonsistenter Scherbenhaufen<\/h2>\n<p>\nBei der Arbeit mit <i>finfo<\/i> und <i>DateTime<\/i> hab ich mich mal wieder so richtig sch\u00f6n \u00fcber den furchtbar uneinheitlichen Mischmasch aus normalen Funktionen und OOP ge\u00e4rgert. Da werden in den prozeduralen Varianten etwa andere Parameter in anderer Reihenfolge erwartet und das Manual bricht sich die Wurst ab. Das ist halt der Fluch der Popularit\u00e4t und des Zwangs zur Abw\u00e4rtskompatibilit\u00e4t.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hasse ja pers\u00f6nlich Artikel wie diesen (313373 PHP Speed Optimization Tweeks you can not live without &#8230; g\u00e4\u00e4hn). Aber beenden wir das Selbstbashing und kommen zum Punkt. stream_resolve_include_path (php >= 5.3.2) Manchmal kann es n\u00fctzlich sein zu wissen, wo &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/3-nuetzliche-unbekannte-php-funktionen\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8,3],"tags":[],"class_list":["post-554","post","type-post","status-publish","format-standard","hentry","category-php","category-quicktips","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=554"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/554\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}