php fails parsing on one machine but not the other - php

I would ask in Chat, but I don't have enough points yet.
I am trying to migrate a server from a deployed setting to a virtual machine running in virtualbox. All networking works fine in the virtual machine. I have no problem posting the code, but I think it is too large and too many files.
I am completely lost. I have
Installed Ubuntu Server (updated etc)
Installed php, apache, mysql, phpmyadmin, etc
ssh'd into the current server
copied the files using tar -zcvf ./html_files_copy.tar.gz ./html/*
copied mysql stuff using mysqldump -uroot -p --all-databases > db_copy.sql
deployed both the html / php files and the mysql database
No matter what I do though, the server generates a blank page. I have looked into this as much as I can figure out and it seems that php is failing on parsing the php code.
How can I fix this and have the php not fail, and why would it work on one machine and not the other? I can copy the stuff back to the old server and it WORKS!? Mysql tables look EXACTLY the same too.
Does it make sense that the completely blank page (debug info is turned on, not sure why it doesn't say anything) is a parsing error caused by the newer PHP not knowing one version older functions anymore?
Is there a list somewhere I can use to search the code for suspect functions?
To get the following info I used phpinfo() in a php file, lsb_release -a and uname -a from terminal using ssh
- New Server
PHP Version 5.5.9-1ubuntu4.5 with Apache/2.4.7
Ubuntu 14.04.01
mysql Client API version 5.5.40
Linux ubuntu 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
- Old Server
PHP Version
5.5.9-1ubuntu4.4, with Apache/2.4.7
on Ubuntu 14.04
mysql Client API version 5.5.40
Linux linuxdesk 3.13.0-34-generic #60-Ubuntu SMP Wed Aug 13 15:45:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Check the PHP log-file or enable error display using the display_errors flag. Also enable logging of all errors: error_reporting(E_ALL); and verify these settings with phpinfo().

Related

Why phpinfo() shows a different version than php -v?

I install php via brew. With brew install PHP. My version of php-cli is 7.2
But, if I use phpinfo() on my server, I get php version 7.1.
If I use php -v in my terminal, I get php version 7.2.
Disclaimer: I'm adding this hopefully extensive answer as part of the Revival badge. (Answer more than 30 days after a question was asked as first answer scoring 2 or more)
TL;DR
php -v settings can be different from phpinfo() inside your web-server due to the running service state of fpm and your webserver. Perhaps you need to restart php-fpm and/or your web-server (apache, nginx, ..).
Long version: Command line
Command-line based calls like php -v or php -i or php test.php will read your configuration, options and arguments every time you execute your script within a terminal.
This means if you update php in your operating system then you'll get the most recent version in your terminal session.
Attention: Depending on your PATH variables you still might get an older version.
What does this mean? Even if you update your php version on your operating system you might still have an older terminal session which links to an older php-binary.
Here is an example: I am an OSX user and installed php through brew. Currently php links to php#7.3. Here is my way to validate which versions are running where. For this I'm using which php.
$ which php
/usr/local/opt/php#7.3/bin/php
$ php -v
PHP 7.3.11 (cli) (built: Oct 24 2019 11:29:42) ( NTS )
// or the equivalent "absolute path" example
$ /usr/local/opt/php#7.3/bin/php -v
PHP 7.3.11 (cli) (built: Oct 24 2019 11:29:42) ( NTS )
I have multiple php-versions installed on my local system. I can run them all individually. Here is an example:
$ /usr/local/opt/php#7.2/bin/php -v
PHP 7.2.20 (cli) (built: Jul 5 2019 12:56:54) ( NTS )
Long version: Why is my phpinfo() using the wrong php version?
Since we now have an understanding that we can run multiple and different versions of php on a single operating system, lets dig into our web-server based script which runs phpinfo().
After installing a new php-version you'll have your binaries replaced by new versions. Awesome! but.. how does my running web server get notified about it?
For this I'll refer to the php documentation Apache 2.x on Unix systems Point 7. Also apache allows us to load different modules for PHP.
Edit your httpd.conf to load the PHP module. [...]
For PHP 7:
LoadModule php7_module modules/libphp7.so
For PHP 5:
LoadModule php5_module modules/libphp5.so
Since you are upgrading from PHP 7.1 to PHP 7.2 there is probably no change but your webserver is still running the old linked version of php.
In this case a restart of your apache webserver should help so it can pickup the new binaries correctly.
Please let me know if this will help you to solve your issue. For all the other readers: If you think there is something missing OR there is something wrong in my explanation then please let me know with a comment.

Differing PHP versions using ssh

I am trying to setup deployer php on a shared server. And having trouble running php remotely on the server.
The server is running php 7.0.6 for normal http requests. And if I SSH in via terminal and run php -v on the remote server I get:
# php -v
PHP 7.0.6 (cli) (built: May 2 2016 02:11:49) ( NTS )
this seems good to go but if I run a remote command from my local machine:
$ ssh 'user#domain.com' 'php -v'
PHP 5.3.28 (cli) (built: Mar 29 2014 12:18:37)
obviously the remote command is not using the right php version. I found the version is set in the .bash_porfile:
export PATH=/usr/local/lib/crucial-php/php-7.0.600/bin:$PATH
but I don't know how to get the ssh remote command to respect the .bash_profile. Is there anyway to get the remote command to use the modified PATH without forcing it with source ~/.bash_profile
This turned out to be pretty simple, after reading this post:
Why does an SSH remote command get fewer environment variables then when run manually?
I copied the PATH var into my ~/.bashrc file and it worked like a charm.

Codeigniter - Setting up cron job, not working

I'm trying to follow the cron job setup as seen in the documentation but I keep running into an issue. In the command line it output all of the markup in the header.php with the following statements at the end:
<h1>An Error Was Encountered</h1>
<p>The MongoDB PECL extension has not been installed or enabled</p>
What I'm typing into the command line:
php index.php tools message
Is there something I need to install on the server? Here are my specs from pecl version.
PEAR Version: 1.9.4
PHP Version: 5.3.10-1ubuntu3.15
Zend Engine Version: 2.3.0
Running on: Linux lucrum 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 16:19:23 UTC 2013 x86_64
I don't have the rep to add this as a comment so i have to post as an answer. But judging from what you posted the error message is telling you that the MongoDB PECL extension hasn't been installed on your server. Have you checked to see if it actualy is installed? If it is then you need to look into your configuration.

I cannot install pdo_pgsql.so to use PostgreSQL in PHP

I have a site that use PostgreSQL database but I found that my RHEL 5 system lacks of pdo_pgsql.so file. I have spent several hours trying to install it but it was impossible.
When using "rpm -i" command with a lot RPMs found in Internet, I always got dependencies problems.
Last command I have issued before posting here was:
rpm -i http://yum.postgresql.org/9.1/redhat/rhel-5-i386/pgdg-redhat91-9.1-5.noarch.rpm
The output to that command was: package pgdg-redhat91-9.1-5 is already installed
And in fact, PostgreSQL database is up and running. The only missing file is pdo_pgsql.so.
I have used "find . / -name pdo_pgsql.so" to see if that file is somewhere in the disk, but without success.
Can you point me to the right direction, please?
These are relevant versions:
psql (PostgreSQL) 9.1.2
PHP 5.3.27 (cli) (built: Dec 8 2013 19:01:03)
Server version: Apache/2.4.1 (Unix)
Red Hat Enterprise Linux Server release 5 (Tikanga)
Cheers
Jaime
I have recompiled last PHP version with Postgres support option and the problem was solved. However, it is strange, because version of PHP I had before worked with postgres. For some reaon, it stopped working,

How to determine which php apache uses?

My phpinfo.php on apache shows
PHP Version 5.4.15
but commandline
php - v
shows
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)
I think apache and commandline reaches the different php,however
which php
shows only
/usr/bin/php
it is 5.4.17
I would like to know where php apache uses, and how can I check which php apache uses?
I think this depend on if you run php files using mod_php5 or cgi. The difference is explained in the accepted answer in this question: What is mod_php?
As I understand it, basically mod_php5 is pre-compiled from a specific PHP version that Apache will than use. While if CGI is used to run PHP the installed PHP command line version will be used when spawning a new process each time a PHP file is executed.
Hope this helps.

Categories