{"id":159,"date":"2008-03-13T15:44:58","date_gmt":"2008-03-13T22:44:58","guid":{"rendered":"http:\/\/eriknovales.com\/blog\/index.php\/2008\/03\/13\/bad-release-practices\/"},"modified":"2008-03-13T15:44:58","modified_gmt":"2008-03-13T22:44:58","slug":"bad-release-practices","status":"publish","type":"post","link":"https:\/\/eriknovales.com\/?p=159","title":{"rendered":"Bad Release Practices"},"content":{"rendered":"<p>I recently ran into some issues with installing <a href=\"http:\/\/www.php.net\/\" target=\"_blank\" rel=\"noopener noreferrer\">PHP<\/a> on an IIS server, and, in the process of tracking down the problems, came to the conclusion that the PHP Group doesn&#8217;t do enough (any?) release testing, and still treats the Windows platform (regardless of whether or not Apache is used) as a second-class citizen. Why? Let&#8217;s see:<\/p>\n<ul>\n<li><a href=\"http:\/\/bugs.php.net\/bug.php?id=41565\" target=\"_blank\" rel=\"noopener noreferrer\">The installer will allow you to install modules for which you don&#8217;t have the prerequisites installed.<\/a> This wouldn&#8217;t be an issue if the PHP interpreter handled this gracefully, but it doesn&#8217;t &#8212; it simply spits out a bunch of dynamic link errors and self-combusts. I agree with the last comment in that bug report &#8212; it may be a case of &#8220;pilot error,&#8221; but the expectation on the Windows platform is that, barring any warnings or errors that are clearly explained to the user, a complete install <strong>should just work<\/strong>.<\/li>\n<li><a href=\"http:\/\/bugs.php.net\/bug.php?id=43913\" target=\"_blank\" rel=\"noopener noreferrer\">The current released version of PHP was completely busted on Windows Server 2003<\/a> &#8212; it doesn&#8217;t read its configuration file correctly. (For the benefit of those who may be Googling for a similar problem, this would result in <a href=\"http:\/\/drupal.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Drupal<\/a>, a CMS I was installing, reporting that &#8220;Your web server does not appear to support any common database types.&#8221;)<\/li>\n<li>Separately from that, <a href=\"http:\/\/bugs.php.net\/bug.php?id=43764\" target=\"_blank\" rel=\"noopener noreferrer\">the released version of PHP also didn&#8217;t set itself up correctly in IIS as a document handler<\/a>. For some unfathomable reason, it used 8.3 file names, which have not been necessary in <strong>the last 13 years<\/strong>. This would cause the document type handler to fail, and 404s to be returned when accessing a PHP file through IIS.<\/li>\n<li>The documentation for the <strong>mysqli<\/strong> module (as well as the similar-but-different <strong>mysql<\/strong> module) recommends adding the PHP directory to the Windows PATH variable, for the express purpose of getting the libmysql DLL bundled with the installer to load correctly. This is <em>terrible<\/em> advice, in my opinion, because, depending on where the user adds the path, the bundled version may take priority over a more recent libmysql installed by MySQL itself. There are additional DLLs in the PHP directory, too, for SSL support, and the same situation could arise there.\n<p>While the library vendors may not have a <a href=\"http:\/\/msdn2.microsoft.com\/en-us\/library\/aa376307.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">side-by-side versioning<\/a> scheme for their DLLs, it&#8217;s still no excuse for advocating a dangerous practice.<\/li>\n<\/ul>\n<p>For a product that is <a href=\"http:\/\/www.php.net\/usage.php\" target=\"_blank\" rel=\"noopener noreferrer\">so widely used<\/a>, these kinds of problems are really inexcusable, and only contribute to the flaky reputation PHP has.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently ran into some issues with installing PHP on an IIS server, and, in the process of tracking down the problems, came to the conclusion that the PHP Group doesn&#8217;t do enough (any?) release testing, and still treats the Windows platform (regardless of whether or not Apache is used) as a second-class citizen. Why? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[7],"tags":[],"class_list":["post-159","post","type-post","status-publish","format-standard","hentry","category-development"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/eriknovales.com\/index.php?rest_route=\/wp\/v2\/posts\/159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eriknovales.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriknovales.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriknovales.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriknovales.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159"}],"version-history":[{"count":0,"href":"https:\/\/eriknovales.com\/index.php?rest_route=\/wp\/v2\/posts\/159\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriknovales.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriknovales.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriknovales.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}