# PHP 5.6.25 Update?



## Mayhem30 (Aug 26, 2016)

Anyone know off hand why it takes so long for new PHP versions to hit the ports system? It's been a week since PHP 5.6.25 was released and it's still not available.

This happens every time. It's not just during the holidays. I've always attempted to contact the port maintainer, but I never receive a response.

I really would like this update as it fixes some bugs I have run in to in my current project.


----------



## marino (Aug 26, 2016)

looking at the commit log in freshports, the maintainer hasn't made a commit since november 2015, and that was to update to version 5.6.16.  Since then, the updates have been done by others.  I think it's fair to ask on the ports mail list about the status of maintainership on php 5.6 (e.g. if others are maintaining it, should maintainship be reset or changed).  You're not the only one not getting a response according to bugs.freebsd.org IIRC.  I'm not going to raise the subject though.


----------



## kpa (Aug 26, 2016)

In my opinion there should be stricter rules for ports that are abandoned by their maintainers, the situation where other committers and port maintainers have to act as firemen on other people's ports is totally unworkable on the long term but unfortunately that's how many of the important ports have survived so far from being marked broken or even from being deleted.


----------



## Mayhem30 (Aug 26, 2016)

Thanks guys, you can follow what's going on here.

https://lists.freebsd.org/pipermail/freebsd-ports/2016-August/104557.html


----------



## CyberCr33p (Aug 27, 2016)

The same with MySQL 5.6. Ports have 5.6.30.


----------



## Murph (Aug 27, 2016)

kpa said:


> In my opinion there should be stricter rules for ports that are abandoned by their maintainers, the situation where other committers and port maintainers have to act as firemen on other people's ports is totally unworkable on the long term but unfortunately that's how many of the important ports have survived so far from being marked broken or even from being deleted.


As a general thing, "stricter rules" and volunteer effort don't really ever work together if the purpose of the stricter rules is to try to force someone to actively do something.  I strongly disagree with your call for stricter rules, as the rules we already have are quite sufficient.  If a port really is abandoned, it's available for someone else who does have the time to pick it up.  If it has a vulnerability, it gets added to vuxml.  If it sits abandoned and broken for a very long time, it may eventually get culled from the tree, but that absolutely should not be shortened.

If you have specific ideas for improved rules which would be fully compatible with volunteer effort, please do propose/discuss them.  Rapidly removing someone as maintainer after only a short period of inactivity would be a terrible idea, as doing so is very likely to discourage some from returning to provide effort in the future.  Anything which tries to forcibly extract effort from a volunteer, or places undue burden on them, is very likely to be rejected or ignored in practice.


----------



## Mayhem30 (Aug 27, 2016)

PHP and MySQL are critical ports for web servers. I just don't understand why they are not better maintained and/or given a higher priority (for anyone else picking up the slack).


----------



## Murph (Aug 27, 2016)

Mayhem30 said:


> PHP and MySQL are critical ports for web servers. I just don't understand why they are not better maintained and/or given a higher priority (for anyone else picking up the slack).


Two simple words: volunteer effort.

In the case of MySQL, it's very possible that not many people care much about it now; due to Oracle ownership, and most of the non-Oracle developers walking away from it (and, I believe significant people inside Oracle may have resigned over it as well).  I certainly would not rate it as "critical" for all web servers in 2016.  It likely is still important to many people, but I personally would encourage them to strongly consider moving to MariaDB (where most the former MySQL developers are, and theoretically an easy jump across from MySQL), PostgreSQL, SQLite, or some other good FOSS DB which hasn't been scuttled by its copyright holder.

As far as priority goes, you can give them whatever ultra-high priority you want, it won't make any difference if there isn't a volunteer who agrees with that priority and is willing to work on it at the time.  Volunteers, in general, will ignore all priorities that they either disagree with or are not interested in.

Personally, I've got the skills and experience to maintain the MySQL port.  I absolutely will not take it on because I refuse to put voluntary effort into Oracle FOSS stuff, and I abandoned all use of MySQL quite some time ago.


----------



## Remington (Aug 27, 2016)

I have moved away from Oracle MySQL.  I mainly use Percona Server on my production servers.  Both MariaDB and Percona are excellent db server that offers more and better than Oracle MySQL.  The only drawback is that once you migrate the db from Oracle MySQL to MariaDB or Percona there is no going back to Oracle MySQL.


----------



## Mayhem30 (Aug 28, 2016)

Murph said:


> Personally, I've got the skills and experience to maintain the MySQL port. I absolutely will not take it on because I refuse to put voluntary effort into Oracle FOSS stuff, and I abandoned all use of MySQL quite some time ago.



I respect your position on this, but that statement has me more concerned than ever now.

If others feel the same way and PHP and MySQL continues to get neglected (for the lack of better words), then my only other option is to look at another OS for my server needs?


----------



## marino (Aug 28, 2016)

No, you can provide patches or offer to maintain these ports that are important *to you*.  There are many other options.

By the way, the "lack of maintenance" is a bit exaggerated, as is the expectation that somebody not paid to do is has to keep PHP updated within 7 days of release, no matter how many other ports he maintains and $REALJOB$ requirements.  A week is nothing.  If you think you can keep 100 PHP ports updated within a couple of days of release (including testing on 6+ platforms maybe) then volunteer for this.  The pay is zero though.


----------



## Murph (Aug 28, 2016)

Mayhem30 said:


> I respect your position on this, but that statement has me more concerned than ever now.
> 
> If others feel the same way and PHP and MySQL continues to get neglected (for the lack of better words), then my only other option is to look at another OS for my server needs?


Well, MySQL isn't actually badly out of date on FreeBSD at present.  You'll also likely encounter similar sentiments about Oracle on every free operating system, as they have essentially crapped all over Sun's FOSS and open systems legacy (and also killed off general use of BDB (v6 onwards)).  Many people are addressing it by abandoning MySQL in favour of MariaDB, which is almost a drop in replacement for it and produced by the people (more or less all of them) who made MySQL what it was prior to Oracle's involvement.

I see MySQL as a sinking ship (I chose "scuttled" quite deliberately above), with a doubtful future, and it is sinking because of the actions of its owner (i.e. it can't be saved).  Fortunately, a better ship has already been launched (MariaDB), is based on the good bits of the previous ship, and is performing well; and is free of the influence of the problematic owner.  You just need to choose which ship you would prefer to be aboard; the sinking one with problematic ownership, or the shiny new one with plenty of support and a promising future.  It's also perfectly valid to take the opportunity to evaluate and consider the many other good FOSS DBs.


----------



## Mayhem30 (Aug 28, 2016)

marino@ said:


> No, you can provide patches or offer to maintain these ports that are important *to you*.



I'm afraid that is beyond my abilities.



marino@ said:


> By the way, the "lack of maintenance" is a bit exaggerated, as is the expectation that somebody not paid to do is has to keep PHP updated within 7 days of release ...



I wasn't really referring to this PHP version, but prior versions have taken much longer.

My point was that this has been an ongoing problem, with no signs of getting better. The reason this one has me more frustrated (to the point of creating this thread) is that the PHP issues I have run into in my current project are fixed in this latest version PHP.


----------



## Remington (Aug 28, 2016)

Mayhem30 said:


> If others feel the same way and PHP and MySQL continues to get neglected (for the lack of better words), then my only other option is to look at another OS for my server needs?



There is no need to be concerned about the lack of maintenance as there are literally thousands of ports so it'll take time for some for volunteers to update the ports after new releases.  PHP source codes can be downloaded directly from developer's website and they are pretty easily to compile on FreeBSD.  I compile the PHP source codes as I have 4 different versions of PHP installed on my production servers.


----------



## Mayhem30 (Aug 30, 2016)

Remington said:


> PHP source codes can be downloaded directly from developer's website and they are pretty easily to compile on FreeBSD.



Can you recommend any guides for doing this? I have a test server at home I can mess with.


----------



## Murph (Aug 30, 2016)

Mayhem30 said:


> Can you recommend any guides for doing this? I have a test server at home I can mess with.


Look at /usr/ports/lang/php56/Makefile and the Porter's Handbook.  Building the newer version may be as simple as updating the version number and doing a `make makesum`, then using the normal port build process.  Clearing any previous PORTREVISION is recommended when going to a newer version.  Some of the patches in the ports tree may either no longer be needed, or might not apply cleanly; it's up to you to figure out what's needed there.


----------



## Remington (Sep 10, 2016)

Mayhem30 said:


> Can you recommend any guides for doing this? I have a test server at home I can mess with.



Sure.  I don't know what your PHP config specs are but you're welcome to fiddle around with it until you get your desired result.  I have 4 versions of PHP installed on my production server for my clients as I would like to avoid having multiple version of extensions installed such as PHP54-CURL, PHP55-CURL, PHP56-CURL and PHP70-CURL in my pkg version listings.  My method makes the job much cleaner and I don't have to wait for weeks for latest PHP build to appear in the repo listing.

1) Remove all installed PHP packages or at least run a bare jail environment for clean PHP builds.

2) Install all the required packages for a successful build.  You can use the pkg repository for this.

`pkg install autoconf bison libxml2 curl jpeg png freetype2 libtool gmp libmcrypt aspell recode re2c`

3) Download the PHP source code from the developer's website and untar the file.

4) This is where you may have to reconfigure the settings to install PHP in proper places in your system.  Copy and paste the whole configure stuff to the command-line inside PHP directory and press enter.

- prefix is where base PHP executables and libraries will be installed.
- sysconfdir is where php configuration file will be installed.

I'm using LibreSSL and 'with-openssl-dir=/usr' is required otherwise it won't compile.  If you're using OpenSSL then remove 'with-openssl-dir=/usr'.


```
./configure \
  --prefix=/usr/local/php/5.6 \
  --sysconfdir=/usr/local/etc/php/5.6 \
  --with-config-file-scan-dir=/usr/local/etc/php/5.6 \
  --with-fpm-user=www \
  --with-fpm-group=www \
  --localstatedir=/var \
  --with-bz2 \
  --with-curl \
  --with-freetype-dir=/usr \
  --with-gd \
  --with-gettext=/usr \
  --with-gmp \
  --with-iconv \
  --with-imap-ssl \
  --with-jpeg-dir=/usr \
  --with-mcrypt \
  --with-mhash \
  --with-mysql \
  --with-mysqli \
  --with-openssl \
  --with-openssl-dir=/usr \
  --with-pcre-regex \
  --with-pear \
  --with-pdo-mysql \
  --with-pdo-sqlite \
  --with-png-dir=/usr \
  --with-pspell \
  --with-recode=/usr \
  --with-sqlite3 \
  --with-zlib=/usr \
  --with-zlib-dir=/usr \
  --disable-all \
  --disable-cgi \
  --enable-bcmath \
  --enable-ctype \
  --enable-dom  \
  --enable-exif \
  --enable-fileinfo \
  --enable-filter \
  --enable-fpm \
  --enable-ftp \
  --enable-gd-jis-conv \
  --enable-gd-native-ttf \
  --enable-hash \
  --enable-json \
  --enable-libxml \
  --enable-mbstring \
  --enable-mysqlnd \
  --enable-opcache \
  --enable-pdo \
  --enable-phar \
  --enable-posix \
  --enable-session \
  --enable-sockets \
  --enable-simplexml \
  --enable-tokenizer \
  --enable-wddx \
  --enable-xml \
  --enable-xmlreader \
  --enable-xmlwriter \
  --enable-zip
```

5) After configuration is successfully completed and do this:

`make install clean`

That's it.  You have working PHP version but you'll need to configure Nginx or Apache to access the PHP executables.

Sometimes after PHP upgrades, it'll be missing a newer library in /usr/local/lib because FreeBSD's libraries haven't been updated in their repository yet.  It's easy to fix by adding a softlink to an older library.  It rarely happens but it's best to test PHP after upgrades to be sure everything is working correctly.

The rest of this information is optional and not required.  If you want to have a default PHP version for the whole system then I would recommend doing this:

`ln -s /usr/local/php/default/bin/php /usr/local/bin/php
ln -s /usr/local/php/default/bin/php-config /usr/local/bin/php-config
ln -s /usr/local/php/default/bin/phpize /usr/local/bin/phpize`

This is the PHP file structure I have in my server.


```
/usr/local/php
/usr/local/php/5.6
/usr/local/php/5.6.24 -> 5.6 (softlink)
/usr/local/php/7.0
/usr/local/php/7.0.9 -> 7.0 (softlink)
/usr/local/php/default -> 5.6 (softlink)
```

If you want to start and stop PHP services in /usr/local/etc/rc.d and I wrote this script:


```
#!/bin/sh

# PROVIDE: php56
# REQUIRE: LOGIN
# KEYWORD: shutdown

#
# Add the following line to /etc/rc.conf to enable php56:
# php56_enable="YES"
#

. /etc/rc.subr

name="php56"
nsub="php-fpm56"
rcvar=php56_enable
vers="5.6"

command="/usr/local/php/${vers}/sbin/php-fpm"

pidfile="/var/run/${nsub}/php-fpm.pid"

required_files="/usr/local/etc/php/${vers}/php-fpm.conf"

sig_stop="QUIT"
sig_reload="USR1"

load_rc_config "$name"
run_rc_command "$1"
```

Let me know if you need further help configuring Nginx to use specific PHP version. Hope this helps.


----------

