Re: override built-in mail()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/04/2011 08:38 PM, Steve Staples wrote:
> On Fri, 2011-02-04 at 20:25 +0100, Thijs Lensselink wrote:
>> On 02/04/2011 04:59 PM, Steve Staples wrote:
>>> On Fri, 2011-02-04 at 07:51 -0800, Jim Lucas wrote:
>>>> On 2/4/2011 5:37 AM, Steve Staples wrote:
>>>>> Hello Guys/Gals,
>>>>>
>>>>> it's friday (at least where I am it is) and I have an issue with a
>>>>> script that I just started using again.  The problem is, is that it uses
>>>>> the built in PHP mail() function, and on my testing server, mail()
>>>>> doesn't work. The other issue, is that I use SMTP Auth to connect to my
>>>>> mail server, so that when mail sends out, it comes from my mail server
>>>>> so that there is less of a chance for being marked as SPAM.
>>>>>
>>>>> So, what I am looking to do, is use either the trust old Pear::Mail or
>>>>> PHPMailer scripts (I am sure there are other ones out there, but those
>>>>> are the 2 I am most familiar with).
>>>>>
>>>>> So now to my actual question.  How can I override the built-in PHP
>>>>> mail() function, to let either of those 2 (or something else someone may
>>>>> suggest) to act in the same manner as the mail() function?
>>>>>
>>>>> Is this easy?  I've googled, but haven't seen any reference to doing
>>>>> what I am looking to do (maybe I just can't google)
>>>>>
>>>>> Steve
>>>>>
>>>>>
>>>>
>>>> You cannot "override" a function.  You will have to write a new function,
>>>> "my_mail" or some such.  Have it take the same arguments as the built in mail
>>>> function, but internally it uses phpmailer or the likes.  Then, do a search and
>>>> replace for " mail(" with " my_mail("
>>>>
>>>> One other possible option, which I had not contemplated until now, would be to
>>>> actually specify a replacement sendmail executable when setting up the sendmail
>>>> option in the php.ini.  You could specify a php script that can run as though it
>>>> was sendmail, accept the same arguments, etc... but do all the phpmailer stuff
>>>> inside.
>>>>
>>>> Jim Lucas
>>>>
>>>
>>> after posting this, and doing some more googleing, I found this:
>>> http://ca.php.net/manual/en/function.override-function.php
>>>
>>> it says you can override built-in php functions... I haven't tested to
>>> see if i can do it, but it seems possible... has anyone used this
>>> before?  and will it do what I need?  (this has been put on the back
>>> burner for today, so tonight I will look more deeper into this unless
>>> someone else has any luck in the mean time)
>>>
>>> TIA!
>>>
>>> Steve
>>>
>>>
>>
>> In PHP versions < 5.3 you need something like runkit or apd. In PHP 5.3
>> and up you could use monkey patching
>>
>> <?php
>>
>> namespace somenamespace;
>>
>> function mail() {
>>   // do something!
>> }
>>
>>
>> You don't actually overwrite the core function but it's close.
>>
>> <?php
>>
>> use somenamespace;
>>
>> mail() // will call the namespaced function
>>
>> \mail() // will call the core function
>>
> 
> The reason i was hoping to override the function, was because then if
> the script has updates, then i would need to change all references of
> mail() to my_mail()   or if i am not using < 5.3  (and what is runkit or
> apd??)
> 
> 

APD is the Advanced PHP Debugger. That reffers to the first link you
added. And runkit is a PHP extension which allows you to override
functions, classes, etc.

http://php.net/manual/en/book.runkit.php

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



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux