0
votes

I need to emails from my PHP script. The Server, which I have hosted my website on, does not allow the use of core PHP mail() function. They say I should write SMTP authentication code for sending emails.

I need to use require_once('System.php'); at the beginning of my PHP script, but the script execution stops beyond this line. In Apache logs of the Server, the log entry says:

AH01071: Got error 'PHP message: PHP Warning: require_once(): open_basedir restriction in effect. File(/opt/plesk/php/5.6/share/pear/System.php) is not within the allowed path(s): (/var/www/vhosts/kbcsurveyors.com/:/tmp/) in /var/www/vhosts/kbcsurveyors.com/preinspection.kbcsurveyors.com/test-smtp-mail.php on line 20\nPHP message: PHP Warning: require_once(/opt/plesk/php/5.6/share/pear/System.php): failed to open stream: Operation not permitted in /var/www/vhosts/kbcsurveyors.com/preinspection.kbcsurveyors.com/test-smtp-mail.php on line 20\nPHP message: PHP Fatal error: require_on................

kbcsurveyors.php is the domain that I have hosted.

For SMTP authentication, I need to use PEAR. I had to include the path/to/pear in the php.ini on the Server. Since, the Server does not allow me to change its own php.ini, I copied it to my domain's folder and appended the path/to/pear to include_path.

Here are commands I used and outputs I had from those commands:

shell_exec('cp /opt/plesk/php/5.6/etc/php.ini /var/www/vhosts/kbcsurveyors.com/httpdocs/includes');

shell_exec('pear config-get php_dir');

OUTPUT: /usr/share/pear

shell_exec('php --ini');

OUTPUT:

Configuration File (php.ini) Path: /etc

Loaded Configuration File: /etc/php.ini

Scan for additional .ini files in: /etc/php.d

Additional .ini files parsed: /etc/php.d/00-ioncube-loader.ini, /etc/php.d/curl.ini, ....

echo get_include_path();

OUTPUT .:/opt/plesk/php/5.6/share/pear

echo 'Class Exists: '.(class_exists('System', false)) ? 'Yes' : 'No';

OUTPUT: Class Exists: Yes

But again, require_once 'System.php'; throws the above error in Apache log.

The phpinfo()ed a script. It shows the include_path as .:/opt/plesk/php/5.6/share/pear in both Local Value and Master Value.

What mistake am I making? Please help.

Thanks in advance

1
Why don't you just use PHPMailer ?Shahaf Antwarg
Best advice is to stop wasting time with a limited hosting plan and use a server where you can change the php.ini file. A $5 per month hosting plan with Digital Ocean or even the free years trial with AWS should get you started very nicely.Nick

1 Answers

1
votes

The problem was solved by appending the path shown by shell_exec('pear config-get php_dir'); to include_path in php.ini of primary domain and all sub-domains.