time consuming loop [message #170865] |
Sat, 04 December 2010 07:39 |
paulfredlein
Messages: 8 Registered: December 2010
Karma: 0
|
Junior Member |
|
|
Hi,
If I use a loop that's too time consuming the browser will complain. Is
there a callback or threads or something I can use and only do a small
number each time instead of the whole lot at once?
for(short i = 0; i < LONG_INT; i++)
{
doSomething();
}
Thanks,
Paul
|
|
|
Re: time consuming loop [message #170873 is a reply to message #170865] |
Sat, 04 December 2010 12:51 |
Kim Andr Aker
Messages: 17 Registered: September 2010
Karma: 0
|
Junior Member |
|
|
På Sat, 04 Dec 2010 08:39:26 +0100, skrev Paul Fredlein
<paulfredlein(at)optusnet(dot)com(dot)au>:
> Hi,
>
> If I use a loop that's too time consuming the browser will complain. Is
> there a callback or threads or something I can use and only do a small
> number each time instead of the whole lot at once?
>
> for(short i = 0; i < LONG_INT; i++)
> {
> doSomething();
> }
Maybe it's not the browser complaining (at least not on its own) - I would
think your script runs into the maximum script execution time (by default
set to 30 seconds, but may differ depending on the host configuration).
One way to work around this, is to reset the counter after each loop using
set_time_limit().
http://php.net/set-time-limit
Like this:
for(short i = 0; i < LONG_INT; i++)
{
doSomething();
set_time_limit(30);
}
--
Kim André Akerø
- kimandre(at)NOSPAMbetadome(dot)com
(remove NOSPAM to contact me directly)
|
|
|
Re: time consuming loop [message #170874 is a reply to message #170865] |
Sat, 04 December 2010 13:37 |
Captain Paralytic
Messages: 204 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On Dec 4, 7:39 am, paulfredl...@optusnet.com.au (Paul Fredlein) wrote:
> Hi,
>
> If I use a loop that's too time consuming the browser will complain. Is
> there a callback or threads or something I can use and only do a small
> number each time instead of the whole lot at once?
>
> for(short i = 0; i < LONG_INT; i++)
> {
> doSomething();
>
> }
>
> Thanks,
>
> Paul
Your browser knows nothing of what php is doing.
PHP however will only execute valid php, which the code you have
posted does not appear to be.
|
|
|
Re: time consuming loop [message #170876 is a reply to message #170865] |
Sat, 04 December 2010 14:02 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 12/4/2010 2:39 AM, Paul Fredlein wrote:
> Hi,
>
> If I use a loop that's too time consuming the browser will complain. Is
> there a callback or threads or something I can use and only do a small
> number each time instead of the whole lot at once?
>
> for(short i = 0; i< LONG_INT; i++)
> {
> doSomething();
> }
>
> Thanks,
>
> Paul
Not in PHP. The browser will time out after whatever setting the
browser has. And this won't be until the PHP code on the server has
finished.
You could get around this with AJAX (see comp.lang.javascript), but the
question is - what are you doing which takes this long? People are not
going to wait very long for a web page to load. And if the browser is
timing out, that's way too long.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: time consuming loop [message #170881 is a reply to message #170865] |
Sat, 04 December 2010 17:50 |
Twayne
Messages: 135 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
In news:1jszks5.1v6hzcuelpu9sN%paulfredlein(at)optusnet(dot)com(dot)au,
Paul Fredlein <paulfredlein(at)optusnet(dot)com(dot)au> typed:
> Hi,
>
> If I use a loop that's too time consuming the browser will
> complain. Is there a callback or threads or something I can
> use and only do a small number each time instead of the
> whole lot at once?
>
> for(short i = 0; i < LONG_INT; i++)
> {
> doSomething();
> }
>
> Thanks,
>
> Paul
Perhaps you should describe what you're trying to do. I know if I ran into a
web page that timed out I'd probably already be long gone and not return.
More info would help.
HTH,
Twayne`
|
|
|
Re: time consuming loop [message #170884 is a reply to message #170881] |
Sun, 05 December 2010 00:56 |
paulfredlein
Messages: 8 Registered: December 2010
Karma: 0
|
Junior Member |
|
|
Hi,
I'm trying to automate the emailing of my newsletter to my contact
group.
In php, I'm thinking of using an arrary of email addresses derived from
a mysql contact list. Then looping through the array emailing each item
with my newsletter.
Originally, I played with this inside a mysql query and delaying each
email by a second so that the host server doesn't think I'm a spammer.
But then the calling php inside my browser just waited and became
'unresponsive'.
So then I thought of the array of email addresses and wondered if
there's a thread or callback mechanism I can use. Or perhaps I can keep
track of a progress variable and use a smaller loop initializing a loop
with the progress variable which is the index into the array - or
something.
To send the newsletter, I just open that php page in my browser and
enter a password and away it goes.
I'm sure this is not the proper way to do this but it's only for my use
and not a commercial product or anythng like that.
Thanks,
Paul
Twayne <nobody(at)devnull(dot)spamcop(dot)net> wrote:
> In news:1jszks5.1v6hzcuelpu9sN%paulfredlein(at)optusnet(dot)com(dot)au,
> Paul Fredlein <paulfredlein(at)optusnet(dot)com(dot)au> typed:
>> Hi,
>>
>> If I use a loop that's too time consuming the browser will
>> complain. Is there a callback or threads or something I can
>> use and only do a small number each time instead of the
>> whole lot at once?
>>
>> for(short i = 0; i < LONG_INT; i++)
>> {
>> doSomething();
>> }
>>
>> Thanks,
>>
>> Paul
>
> Perhaps you should describe what you're trying to do. I know if I ran into a
> web page that timed out I'd probably already be long gone and not return.
> More info would help.
> HTH,
>
> Twayne`
|
|
|
Re: time consuming loop [message #170885 is a reply to message #170884] |
Sun, 05 December 2010 13:06 |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
Paul Fredlein wrote:
> Hi,
>
> I'm trying to automate the emailing of my newsletter to my contact
> group.
>
> In php, I'm thinking of using an arrary of email addresses derived from
> a mysql contact list. Then looping through the array emailing each item
> with my newsletter.
>
> Originally, I played with this inside a mysql query and delaying each
> email by a second so that the host server doesn't think I'm a spammer.
> But then the calling php inside my browser just waited and became
> 'unresponsive'.
>
> So then I thought of the array of email addresses and wondered if
> there's a thread or callback mechanism I can use. Or perhaps I can keep
> track of a progress variable and use a smaller loop initializing a loop
> with the progress variable which is the index into the array - or
> something.
>
> To send the newsletter, I just open that php page in my browser and
> enter a password and away it goes.
>
> I'm sure this is not the proper way to do this but it's only for my use
> and not a commercial product or anythng like that.
>
> Thanks,
>
> Paul
>
I just built this for a small charity site.
Why not simply send the one email Bcc:'ed to all the recipients?
That will be queued in milliseconds, and go when the mailer gets around
to it.
My ISP is happy to let me do that. I asked them.
|
|
|
Re: time consuming loop [message #170886 is a reply to message #170885] |
Sun, 05 December 2010 14:00 |
paulfredlein
Messages: 8 Registered: December 2010
Karma: 0
|
Junior Member |
|
|
Hi,
I never thought of Bcc, but I have around 300 to email.
Regards,
Paul
The Natural Philosopher <tnp(at)invalid(dot)invalid> wrote:
> Paul Fredlein wrote:
>> Hi,
>>
>> I'm trying to automate the emailing of my newsletter to my contact
>> group.
>>
>> In php, I'm thinking of using an arrary of email addresses derived from
>> a mysql contact list. Then looping through the array emailing each item
>> with my newsletter.
>>
>> Originally, I played with this inside a mysql query and delaying each
>> email by a second so that the host server doesn't think I'm a spammer.
>> But then the calling php inside my browser just waited and became
>> 'unresponsive'.
>>
>> So then I thought of the array of email addresses and wondered if
>> there's a thread or callback mechanism I can use. Or perhaps I can keep
>> track of a progress variable and use a smaller loop initializing a loop
>> with the progress variable which is the index into the array - or
>> something.
>>
>> To send the newsletter, I just open that php page in my browser and
>> enter a password and away it goes.
>>
>> I'm sure this is not the proper way to do this but it's only for my use
>> and not a commercial product or anythng like that.
>>
>> Thanks,
>>
>> Paul
>>
>
> I just built this for a small charity site.
>
> Why not simply send the one email Bcc:'ed to all the recipients?
>
>
> That will be queued in milliseconds, and go when the mailer gets around
> to it.
>
> My ISP is happy to let me do that. I asked them.
|
|
|
Re: time consuming loop [message #170891 is a reply to message #170886] |
Sun, 05 December 2010 17:59 |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
Paul Fredlein wrote:
> Hi,
>
> I never thought of Bcc, but I have around 300 to email.
>
Ask your ISP.
Mine said up to 250 or 250 an hour, 'but we can make an exception for
your IP address' or something. I have no more than 100 at the moment
here's my code - adjusted for anonymity
$employee _id contains the identity of the person using the mailer -
they are uses as the return and fro addresses.
$_POST['status'] selects a subset of the entire mailing list.
function sendmail()
{
global $employee_id;
if(isset($_POST['status']))
$status=$_POST['status'];
else return("-1");
if (strlen($_POST['body'])<1)
return ("-2");
else $body=stripslashes($_POST['body']);
$subject=$_POST['subject'];
$return_path="webmaster(at)mysite(dot)org";
$from=mysql_result(mysql_query(sprintf("select email
from people
where id='%d'",
$employee_id)),0,'email');
// get list of addressees
mysql_query("set group_concat_max_len = 8192");
//...to avoid truncation
// This bit gets a comma delimited array of email
// addresses disregarding those that have no '@' in them
$email=mysql_result(mysql_query(sprintf("select 1 as g,
group_concat(email separator ',') as them
from people
where status>='%d' and instr(email,'@')
group by g",$status)),
0,'them');
//
$headers = sprintf("From: %s\nBcc:%s\n", $from,$email);
mail('', $subject, $body, $headers, "-f ".$return_path );
return("");
}
That may serve as a starting point for you.
|
|
|
Re: time consuming loop [message #170894 is a reply to message #170891] |
Sun, 05 December 2010 18:35 |
Captain Paralytic
Messages: 204 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On Dec 5, 5:59 pm, The Natural Philosopher <t...@invalid.invalid>
wrote:
> Paul Fredlein wrote:
>> Hi,
>
>> I never thought of Bcc, but I have around 300 to email.
>
> Ask your ISP.
>
> Mine said up to 250 or 250 an hour,
Can you explain that?
|
|
|
Re: time consuming loop [message #170898 is a reply to message #170891] |
Mon, 06 December 2010 07:58 |
paulfredlein
Messages: 8 Registered: December 2010
Karma: 0
|
Junior Member |
|
|
Hi,
Thanks for that. I'll have a play and see what happens.
Regards,
Paul
The Natural Philosopher <tnp(at)invalid(dot)invalid> wrote:
> Paul Fredlein wrote:
>> Hi,
>>
>> I never thought of Bcc, but I have around 300 to email.
>>
> Ask your ISP.
>
> Mine said up to 250 or 250 an hour, 'but we can make an exception for
> your IP address' or something. I have no more than 100 at the moment
>
>
> here's my code - adjusted for anonymity
> $employee _id contains the identity of the person using the mailer -
> they are uses as the return and fro addresses.
>
> $_POST['status'] selects a subset of the entire mailing list.
>
> function sendmail()
> {
> global $employee_id;
> if(isset($_POST['status']))
> $status=$_POST['status'];
> else return("-1");
> if (strlen($_POST['body'])<1)
> return ("-2");
> else $body=stripslashes($_POST['body']);
> $subject=$_POST['subject'];
> $return_path="webmaster(at)mysite(dot)org";
> $from=mysql_result(mysql_query(sprintf("select email
> from people
> where id='%d'",
> $employee_id)),0,'email');
> // get list of addressees
> mysql_query("set group_concat_max_len = 8192");
> //...to avoid truncation
> // This bit gets a comma delimited array of email
> // addresses disregarding those that have no '@' in them
> $email=mysql_result(mysql_query(sprintf("select 1 as g,
> group_concat(email separator ',') as them
> from people
> where status>='%d' and instr(email,'@')
> group by g",$status)),
> 0,'them');
> //
> $headers = sprintf("From: %s\nBcc:%s\n", $from,$email);
> mail('', $subject, $body, $headers, "-f ".$return_path );
> return("");
> }
>
>
> That may serve as a starting point for you.
|
|
|
Re: time consuming loop [message #170904 is a reply to message #170894] |
Mon, 06 December 2010 22:09 |
The Natural Philosoph
Messages: 993 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
Captain Paralytic wrote:
> On Dec 5, 5:59 pm, The Natural Philosopher <t...@invalid.invalid>
> wrote:
>> Paul Fredlein wrote:
>>> Hi,
>>> I never thought of Bcc, but I have around 300 to email.
>> Ask your ISP.
>>
>> Mine said up to 250 or 250 an hour,
> Can you explain that?
Up to 250 addressees in a single message, or up to 250 separate emails
per hour. Or whatever the worst combination was of the two. I think they
just count the total addressee list irrsepectve of number of emails and
if it goes over 250 in a hour, Robert is a relative and its bouncy
castle time...
|
|
|