Pear include path problem

Pear include path problem

am 17.11.2009 18:40:22 von Al

I've got script that uses the pear Mail class and have had problems on some
shared hosts with the include path to Mail. E.g., Blue Host insists the site
owner must change the php.ini file. I'd rather not expect them to do that.

Can you folks critique this approach for me.

if(EMAIL_MODE=='smtp'){
$basePath = str_ireplace('public_html', '', $_SERVER['DOCUMENT_ROOT']);
set_include_path(get_include_path() . PATH_SEPARATOR . basePath);
require_once "$basePath/php" . '/Mail.php';
$smtpStatus=(class_exists('Mail'))?true:false;
}

Thanks....

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Pear include path problem

am 17.11.2009 21:17:33 von List Manager

Al wrote:
> I've got script that uses the pear Mail class and have had problems on
> some shared hosts with the include path to Mail. E.g., Blue Host insists
> the site owner must change the php.ini file. I'd rather not expect them
> to do that.
>
> Can you folks critique this approach for me.
>
> if(EMAIL_MODE=='smtp'){
> $basePath = str_ireplace('public_html', '', $_SERVER['DOCUMENT_ROOT']);
> set_include_path(get_include_path() . PATH_SEPARATOR . basePath);
> require_once "$basePath/php" . '/Mail.php';
> $smtpStatus=(class_exists('Mail'))?true:false;
> }
>
> Thanks....
>

How about this

# Check to see if the constant is defined BEFORE you try to use it.
if ( defined('EMAIL_MODE') && EMAIL_MODE == 'smtp' ) {

# You might want to do more checking on the path. Checking to see if it
# has double forward slashes at the end would be the first place to start
$basePath = str_ireplace('public_html', '', $_SERVER['DOCUMENT_ROOT']);

# IMO, no improvement needed here
set_include_path(get_include_path() . PATH_SEPARATOR . $basePath);

# Well, it is what it is
$filename = "{$basePath}/php/Mail.php";

# Check to see if file exists and is readable BEFORE you try including it
if ( is_file($filename) && is_readable($filename) ) {
require_once $filename;
$smtpStatus=(class_exists('Mail'))?true:false;
} else {
$smtpStatus = false;
}
}

Jim Lucas

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Re: Pear include path problem

am 17.11.2009 21:51:01 von Al

Jim Lucas wrote:
> Al wrote:
>> I've got script that uses the pear Mail class and have had problems on
>> some shared hosts with the include path to Mail. E.g., Blue Host insists
>> the site owner must change the php.ini file. I'd rather not expect them
>> to do that.
>>
>> Can you folks critique this approach for me.
>>
>> if(EMAIL_MODE=='smtp'){
>> $basePath = str_ireplace('public_html', '', $_SERVER['DOCUMENT_ROOT']);
>> set_include_path(get_include_path() . PATH_SEPARATOR . basePath);
>> require_once "$basePath/php" . '/Mail.php';
>> $smtpStatus=(class_exists('Mail'))?true:false;
>> }
>>
>> Thanks....
>>
>
> How about this
>
> # Check to see if the constant is defined BEFORE you try to use it.
> if ( defined('EMAIL_MODE') && EMAIL_MODE == 'smtp' ) {
>
> # You might want to do more checking on the path. Checking to see if it
> # has double forward slashes at the end would be the first place to start
> $basePath = str_ireplace('public_html', '', $_SERVER['DOCUMENT_ROOT']);
>
> # IMO, no improvement needed here
> set_include_path(get_include_path() . PATH_SEPARATOR . $basePath);
>
> # Well, it is what it is
> $filename = "{$basePath}/php/Mail.php";
>
> # Check to see if file exists and is readable BEFORE you try including it
> if ( is_file($filename) && is_readable($filename) ) {
> require_once $filename;
> $smtpStatus=(class_exists('Mail'))?true:false;
> } else {
> $smtpStatus = false;
> }
> }
>
> Jim Lucas

Thanks for the feedback. That's big help. I'm sending this revised code to my
client to install on his Bluehost server.

Actually, I do check if EMAIL_MODE is defined; just didn't show it here.

And, I have debug mode that provides a more detailed error report. But, it
doesn't help if it can't even find Mail

if (PEAR::isError($result))
{
$mode = EMAIL_MODE;

throw new Exception("The email mode \"$mode\" does not work. Check the
Applic email address and password in config file.

Tech support required, use DISABLE_MAIL_SEND to debug. Error found in
pearEmailSend().
" .
$result->getMessage());
}




--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php