php-general Digest 3 Sep 2007 20:32:59 -0000 Issue 4998
Topics (messages 261630 through 261660):
Re: what is my dns ip address
261630 by: Per Jessen
261631 by: Olav Mørkrid
clickbank (merchandise provider) for creditcard based internet online
transaction.
261632 by: Patrik Hasibuan
Re: Create a matrix gallery
261633 by: Stut
261636 by: Bastien Koert
amfphp
261634 by: Nathan Wallis
Re: Pragmatically changing a "Record Number"
261635 by: tedd
261643 by: brian
261654 by: tedd
261657 by: brian
Generating foldout menus in php
261637 by: Arno Kuhl
261638 by: Richard Heyes
261639 by: Zoltán Németh
261641 by: Colin Guthrie
261642 by: Richard Heyes
261644 by: Zoltán Németh
261645 by: Colin Guthrie
261647 by: Richard Heyes
261650 by: tedd
261651 by: tedd
Re: php-general Digest 31 Aug 2007 16:34:36 -0000 Issue 4992
261640 by: Michael Williams
Re: mail() takes too much time
261646 by: Matthew Lasar
261648 by: Colin Guthrie
261649 by: brian
261653 by: Stut
261656 by: Colin Guthrie
261659 by: Stut
Re: PHP Developer Required
261652 by: mlists
261655 by: tedd
Re: PHP/MySQL not playing nicely. Server drops connection.
261658 by: Michael Williams
Re: PHP-VOX Project Advancement (PHP Text-To-Speech)
261660 by: tedd
Administrivia:
To subscribe to the digest, e-mail:
[EMAIL PROTECTED]
To unsubscribe from the digest, e-mail:
[EMAIL PROTECTED]
To post to the list, e-mail:
[EMAIL PROTECTED]
----------------------------------------------------------------------
--- Begin Message ---
Olav Mørkrid wrote:
> the source of the problem is gethostbyaddr(). it seems to have a 4,5
> second timeout, so some lookups time out after 4,5 seconds, while most
> of them are resolved in < 0.1 second; a radically performance
> difference.
You can change the timeout be amending the options statement
in /etc/resolv.conf:
options timeout: 2 (2 seconds).
See 'man resolv.conf'.
/Per Jessen, Zürich
--- End Message ---
--- Begin Message ---
yeah but i assume this assumes you are on a unix machine and have
administrator rights. it would be nice to be able to look up ip
addresses swiftly and automatically on any machine and any operating
system running php.
On 03/09/07, Per Jessen <[EMAIL PROTECTED]> wrote:
> Olav Mørkrid wrote:
>
> > the source of the problem is gethostbyaddr(). it seems to have a 4,5
> > second timeout, so some lookups time out after 4,5 seconds, while most
> > of them are resolved in < 0.1 second; a radically performance
> > difference.
>
> You can change the timeout be amending the options statement
> in /etc/resolv.conf:
>
> options timeout: 2 (2 seconds).
>
> See 'man resolv.conf'.
>
>
>
> /Per Jessen, Zürich
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--- End Message ---
--- Begin Message ---
Dear all of my friends in this mailing-list,
Has anybody here ever tried creating a creditcard based internet online
transaction with PHP to clickbank (http://www.clickbank.com)?
Which PHP Library should I use to develop the payment process? Can I use CURL
for clickbank?
Among all of my friends in this mailing-list, has anybody ever get problem or
find the disadvantage to use the service of clickbank?
Thank you very much in advance.
--
Patrik Hasibuan <[EMAIL PROTECTED]>
Junior Programmer
--- End Message ---
--- Begin Message ---
Humani Power wrote:
hi list. I wonder if anyone can help me with this.
i have a database with the file name of several images stored in a
filesystem, and I want to create a table containing the image results of a
query.
this is my code
<snip>
while ($rows=mysql_fetch_assoc($getpic))
{
extract ($rows);
echo "<tr>";
echo "<td><a href=editing_image.php?pic=".$rows['image_id']."><img
src=".$ImageThumb.$rows['image_id'].".jpg></td>";
}
<snip>
With this code, I am able to see the thumb images with their respective link
ok, but if I have a query with 40 results, I will have a big row of images.
____________________________________________________
|pic1 | pic2 | pic3 | pic4 | pic5 | pic6 | pic7 | pic8 | pic9 | pic10 |
______________________________________________________
What I want to to do is insert a new <td> after showing 5 thumb images, and
continue with the next picture on the next row.
something like this
__________________________
|pic1 | pic2 | pic3 | pic4 | pic5 |
__________________________
|pic6 | pic7 | pic8 | pic9 | pic10 |
__________________________
|pic11 | pic12 | pic13 |
__________________
This is really quite simple...
$col = 1;
while ($rows=mysql_fetch_assoc($getpic))
{
extract ($rows);
if ($col == 1) echo "<tr>";
echo "<td><a href=editing_image.php?pic=".$rows['image_id']."><img
src=".$ImageThumb.$rows['image_id'].".jpg></td>";
if ($col++ == 5)
{
echo "</tr>";
$col = 1;
}
}
Not sure why you are using extract when you then go on to use $rows as
an array. Also, you're lacking quotes around the href in the link you
output, and also the src in the image. It's also missing a closing </a>
tag. And you should be using urlencode when putting values into a URL.
And while I'm at it, $row is more semantically correct than $rows.
Try this...
$col = 1;
while ($row = mysql_fetch_assoc($getpic))
{
if ($col == 1) echo '<tr>';
$image_id = urlencode($row['image_id']);
echo '<td><a
href="editing_image.php?pic='.urlencode($image_id).'"><img
src="'.$ImageThumb.urlencode($image_id).'.jpg" /></a></td>';
if ($col++ == 5)
{
echo '</tr>';
$col = 1;
}
}
-Stut
--
http://stut.net/
--- End Message ---
--- Begin Message ---
Hotmail sucks
but try this
[code]
$counter = 1;
while ($rows=mysql_fetch_assoc($getpic))
{
//close the tr tag after 5 photos usng the mod function to check the counter
if($counter % 5 == 0) {
echo "";
//reset the counter
$counter = 1;
}
extract ($rows);
echo "";
echo "";
$counter++;
}
hth
bastien
}
?>
----------------------------------------> Date: Mon, 3 Sep 2007 04:30:29 -0400>
From: [EMAIL PROTECTED]> To: [EMAIL PROTECTED]> Subject: [PHP] Create a matrix
gallery>> hi list. I wonder if anyone can help me with this.> i have a database
with the file name of several images stored in a> filesystem, and I want to
create a table containing the image results of a> query.>> this is my code>>
include_once("../../../connection/connection.php");> ?>> > > Image Gallery> >>
> //get the thumbsnails> $getpic=mysql_query("select * from rsiis_images")> or
die(mysql_error());>>> while ($rows=mysql_fetch_assoc($getpic))> {> extract
($rows);> echo "";> echo " src=".$ImageThumb.$rows['image_id'].".jpg>";> }>
?>>> >> > > >> With this code, I am able to see the thumb images with their
respective link> ok, but if I have a query with 40 results, I will have a big
row of images.> ____________________________________________________>> |pic1 |
pic2 | pic3 | pic4 | pic5 | pic6 | pic7 | pic8 | pic9 | pic10 |>
______________________________________________________>>> What I want to to do
is insert a new after showing 5 thumb images, and> continue with the next
picture on the next row.> something like this> __________________________>
|pic1 | pic2 | pic3 | pic4 | pic5 |> __________________________> |pic6 | pic7 |
pic8 | pic9 | pic10 |> __________________________> |pic11 | pic12 | pic13 |>
__________________>>>> Thanks in advance.> Yamil
_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE
--- End Message ---
--- Begin Message ---
Hey there,
I am running amfphp on my webserver locally and it works well when I use
localhost, so I change localhost to my computers local IP address which is
192.168.1.2 and then test it from another machine. Nothing happens, the
remote procedure does not get called.
Any ideas on this?
Thanks,
Nathan
--- End Message ---
--- Begin Message ---
At 10:27 AM +1000 9/3/07, Chris wrote:
tedd wrote:
At 6:14 PM -0400 9/2/07, brian wrote:
tedd wrote:
Hi to the original poster:
Snip -- a lot of discussion
Use the following code at your own peril.
$dbQuery = "ALTER TABLE $dbtable ";
$dbQuery .= "DROP id, ";
$dbQuery .= "ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT,";
$dbQuery .= "AUTO_INCREMENT = 1";
$result = mysql_query($dbQuery) or die("Could not renumber dB
$dbQuery" . mysql_error());
The reason for not wanting to care about the auto_increment id is
that it is something that the database uses and really should not
be changed. If you want to have a sequential record number, then
add that field and alter it as you will, but leave the internal
workings of database alone.
However, if you wish not to understand how all that works, then
use the code above -- it will renumber your auto_increment id
leaving no gaps.
-snip-
How is that contrary to what I said?
You are actually changing the id's in the database.
Brian's example is making up an id to display (much like the excel
row numbers) rather than actually changing the id in the database.
Please read what I said above, If you do, then you will see that I
advised against altering the index and recommend setting up another
field for displaying a record sequence.
Cheers,
tedd
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---
--- Begin Message ---
tedd wrote:
At 10:27 AM +1000 9/3/07, Chris wrote:
tedd wrote:
At 6:14 PM -0400 9/2/07, brian wrote:
tedd wrote:
How is that contrary to what I said?
You are actually changing the id's in the database.
Brian's example is making up an id to display (much like the excel row
numbers) rather than actually changing the id in the database.
Please read what I said above, If you do, then you will see that I
advised against altering the index and recommend setting up another
field for displaying a record sequence.
It seemed to me that what you were suggesting was to either alter the
existing id or to create a second auto_increment field. Isn't there
already an auto_increment field in the table? I thought that that was
what this was all about: an increment that has gaps.
In any case, i can't see how that would help considering that, should
any of the rows then be deleted, we're back to the same problem: the
auto_increment field will have a gap. That's why the simplest way to
deal with this is to increment a counter var in the presentational
logic, given that this counter is for presentational purposes only and
is unnecessary to relate to any specific row. That's what the existing
id column is for (however "out of order" it may be).
brian
--- End Message ---
--- Begin Message ---
At 11:48 AM -0400 9/3/07, brian wrote:
tedd wrote:
At 10:27 AM +1000 9/3/07, Chris wrote:
tedd wrote:
At 6:14 PM -0400 9/2/07, brian wrote:
tedd wrote:
How is that contrary to what I said?
You are actually changing the id's in the database.
Brian's example is making up an id to display (much like the excel
row numbers) rather than actually changing the id in the database.
Please read what I said above, If you do, then you will see that I
advised against altering the index and recommend setting up another
field for displaying a record sequence.
It seemed to me that what you were suggesting was to either alter
the existing id or to create a second auto_increment field. Isn't
there already an auto_increment field in the table? I thought that
that was what this was all about: an increment that has gaps.
In any case, i can't see how that would help considering that,
should any of the rows then be deleted, we're back to the same
problem: the auto_increment field will have a gap. That's why the
simplest way to deal with this is to increment a counter var in the
presentational logic, given that this counter is for presentational
purposes only and is unnecessary to relate to any specific row.
That's what the existing id column is for (however "out of order" it
may be).
brian
Arrggg. No, I did not say create another auto_increment field -- I said:
Quote
The reason for not wanting to care about the auto_increment id is
that it is something that the database uses and really should not be
changed. If you want to have a sequential record number, then add
that field and alter it as you will, but leave the internal workings
of database alone.
Un-quote
Now, I do not know why what I said seemed to mean something different
to you, but my guess is that you didn't read it thoroughly.
As for the "gap" problem, there is no gap problem if you create
another field for record number and alter it to your liking (NOTE: I
did not say AUTO_INCREMENT). If you add/delete a record, then adjust
the "field for record number" accordingly. You don't have to adjust
the database's index to handle gaps.
I don't see the problem here other than misunderstanding what's been said.
Cheers,
tedd
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---
--- Begin Message ---
tedd wrote:
At 11:48 AM -0400 9/3/07, brian wrote:
Arrggg. No, I did not say create another auto_increment field -- I said:
Quote
The reason for not wanting to care about the auto_increment id is that
it is something that the database uses and really should not be changed.
If you want to have a sequential record number, then add that field and
alter it as you will, but leave the internal workings of database alone.
Un-quote
Now, I do not know why what I said seemed to mean something different to
you, but my guess is that you didn't read it thoroughly.
My bad. I see, now, that what you meant was, "This is how to re-set your
EXISTING auto_increment, AND, here's something else you can do." Yes, i
was confused about your intention.
As for the "gap" problem, there is no gap problem if you create another
field for record number and alter it to your liking (NOTE: I did not say
AUTO_INCREMENT). If you add/delete a record, then adjust the "field for
record number" accordingly. You don't have to adjust the database's
index to handle gaps.
Well, yes, that would work also but is horribly inefficient because the
*entire table* must be altered any time a row is deleted.
I don't see the problem here other than misunderstanding what's been said.
Well, not seperating data and presentation would be another problem,
IMO. What if the client decides that Roman notation is cooler? You have
to ask yourself what this 'counting column' is doing in your database.
Let PHP/Python/XSL/whatever take care of numbering the rows.
brian
--- End Message ---
--- Begin Message ---
This may not be directly php related but I'm hoping that generating the code
with PHP will keep it on topic.
I'm looking for a way to generate dropdown/foldout menus (horizontal and
vertical) on the fly, but all the javascript solutions I've seen use
absolute or relative pixel positioning, which means I can't use them because
I don't know at the time of generating a specific menu item how many pixels
across or down the preceding items have already used. I'm currently using a
javascript menu that works really well, but all the top-level menu items
have to be preset with specific x-y pixel coordinates, and all the
subsequent items are then relative to the top-level items. So I can generate
the second-level and subsequent items on the fly but not the top-level
items. Is there a way to use css or dhtml or something else (maybe something
in javascript that I missed) to do this?
Thanks
Arno
--- End Message ---
--- Begin Message ---
I'm looking for a way to generate dropdown/foldout menus (horizontal and
vertical) on the fly, but all the javascript solutions I've seen use
absolute or relative pixel positioning, which means I can't use them because
I don't know at the time of generating a specific menu item how many pixels
across or down the preceding items have already used. I'm currently using a
javascript menu that works really well, but all the top-level menu items
have to be preset with specific x-y pixel coordinates, and all the
subsequent items are then relative to the top-level items. So I can generate
the second-level and subsequent items on the fly but not the top-level
items. Is there a way to use css or dhtml or something else (maybe something
in javascript that I missed) to do this?
Is this: http://www.phpguru.org/static/dynContext.example.html what you
mean?
--
Richard Heyes
+44 (0)800 0213 172
http://www.websupportsolutions.co.uk
Knowledge Base and HelpDesk software
that can cut the cost of online support
--- End Message ---
--- Begin Message ---
2007. 09. 3, hétfő keltezéssel 15.09-kor Richard Heyes ezt írta:
> > I'm looking for a way to generate dropdown/foldout menus (horizontal and
> > vertical) on the fly, but all the javascript solutions I've seen use
> > absolute or relative pixel positioning, which means I can't use them because
> > I don't know at the time of generating a specific menu item how many pixels
> > across or down the preceding items have already used. I'm currently using a
> > javascript menu that works really well, but all the top-level menu items
> > have to be preset with specific x-y pixel coordinates, and all the
> > subsequent items are then relative to the top-level items. So I can generate
> > the second-level and subsequent items on the fly but not the top-level
> > items. Is there a way to use css or dhtml or something else (maybe something
> > in javascript that I missed) to do this?
>
> Is this: http://www.phpguru.org/static/dynContext.example.html what you
> mean?
>
hmm on Linux/Firefox I can not see any custom menu... there's a box
saying "Right click here to see menu" - I tried right click, left click,
double click there and nothing happens. (on right click the standard
firefox context menu appears)
greets
Zoltán Németh
> --
> Richard Heyes
> +44 (0)800 0213 172
> http://www.websupportsolutions.co.uk
>
> Knowledge Base and HelpDesk software
> that can cut the cost of online support
>
--- End Message ---
--- Begin Message ---
Zoltán Németh wrote:
> hmm on Linux/Firefox I can not see any custom menu... there's a box
> saying "Right click here to see menu" - I tried right click, left click,
> double click there and nothing happens. (on right click the standard
> firefox context menu appears)
Works for me with FF2 on Linux. Perhaps some extension is getting in the
way?
Col
--- End Message ---
--- Begin Message ---
Colin Guthrie wrote:
Zoltán Németh wrote:
hmm on Linux/Firefox I can not see any custom menu... there's a box
saying "Right click here to see menu" - I tried right click, left click,
double click there and nothing happens. (on right click the standard
firefox context menu appears)
Works for me with FF2 on Linux. Perhaps some extension is getting in the
way?
Really? That surprises me since the "layer" it uses is (or was) IE only.
I guess FF2 supports it.
--
Richard Heyes
+44 (0)800 0213 172
http://www.websupportsolutions.co.uk
Knowledge Base and HelpDesk software
that can cut the cost of online support
--- End Message ---
--- Begin Message ---
2007. 09. 3, hétfő keltezéssel 16.34-kor Colin Guthrie ezt írta:
> Zoltán Németh wrote:
> > hmm on Linux/Firefox I can not see any custom menu... there's a box
> > saying "Right click here to see menu" - I tried right click, left click,
> > double click there and nothing happens. (on right click the standard
> > firefox context menu appears)
>
> Works for me with FF2 on Linux. Perhaps some extension is getting in the
> way?
I checked with 1.5.0.12 and 2.0.0.6, on two separate machines, both have
WebDeveloper and AdBlock plus plugins installed and both run on
(different versions of) Ubuntu...
so it might be WebDeveloper or the AdBlock plus, I don't know...
greets
Zoltán Németh
>
> Col
>
--- End Message ---
--- Begin Message ---
Richard Heyes wrote:
> Colin Guthrie wrote:
>> Zoltán Németh wrote:
>>> hmm on Linux/Firefox I can not see any custom menu... there's a box
>>> saying "Right click here to see menu" - I tried right click, left click,
>>> double click there and nothing happens. (on right click the standard
>>> firefox context menu appears)
>>
>> Works for me with FF2 on Linux. Perhaps some extension is getting in the
>> way?
>
> Really? That surprises me since the "layer" it uses is (or was) IE only.
> I guess FF2 supports it.
I don't make the fries, I just read the menu ;)
Col
--- End Message ---
--- Begin Message ---
Zoltán Németh wrote:
2007. 09. 3, hétfő keltezéssel 16.34-kor Colin Guthrie ezt írta:
Zoltán Németh wrote:
hmm on Linux/Firefox I can not see any custom menu... there's a box
saying "Right click here to see menu" - I tried right click, left click,
double click there and nothing happens. (on right click the standard
firefox context menu appears)
Works for me with FF2 on Linux. Perhaps some extension is getting in the
way?
I checked with 1.5.0.12 and 2.0.0.6, on two separate machines, both have
WebDeveloper and AdBlock plus plugins installed and both run on
(different versions of) Ubuntu...
so it might be WebDeveloper or the AdBlock plus, I don't know...
Wow, I've (now) tried it mine (1.5.13) and it seems to work flawlessly.
Shocking.
--
Richard Heyes
+44 (0)800 0213 172
http://www.websupportsolutions.co.uk
Knowledge Base and HelpDesk software
that can cut the cost of online support
--- End Message ---
--- Begin Message ---
At 4:07 PM +0200 9/3/07, Arno Kuhl wrote:
This may not be directly php related but I'm hoping that generating the code
with PHP will keep it on topic.
I'm looking for a way to generate dropdown/foldout menus (horizontal and
vertical) on the fly, but all the javascript solutions I've seen use
absolute or relative pixel positioning, which means I can't use them because
I don't know at the time of generating a specific menu item how many pixels
across or down the preceding items have already used. I'm currently using a
javascript menu that works really well, but all the top-level menu items
have to be preset with specific x-y pixel coordinates, and all the
subsequent items are then relative to the top-level items. So I can generate
the second-level and subsequent items on the fly but not the top-level
items. Is there a way to use css or dhtml or something else (maybe something
in javascript that I missed) to do this?
Thanks
Arno
Arno:
There's really no way to do this just using php. I can envision a way
to use php with a couple of other languages to provide drop-down and
pop-out menus, but that would be more complicated than just using css
with js, like so:
http://sperling.com/examples/menuh/
http://sperling.com/examples/menuv/
Why complicate your life?
Cheers,
tedd
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---
--- Begin Message ---
At 3:09 PM +0100 9/3/07, Richard Heyes wrote:
I'm looking for a way to generate dropdown/foldout menus (horizontal and
vertical) on the fly, but all the javascript solutions I've seen use
absolute or relative pixel positioning, which means I can't use them because
I don't know at the time of generating a specific menu item how many pixels
across or down the preceding items have already used. I'm currently using a
javascript menu that works really well, but all the top-level menu items
have to be preset with specific x-y pixel coordinates, and all the
subsequent items are then relative to the top-level items. So I can generate
the second-level and subsequent items on the fly but not the top-level
items. Is there a way to use css or dhtml or something else (maybe something
in javascript that I missed) to do this?
Is this: http://www.phpguru.org/static/dynContext.example.html what you mean?
--
Richard Heyes
+44 (0)800 0213 172
http://www.websupportsolutions.co.uk
That doesn't do anything in my browser (Safari). Besides, I don't
have a right click button.
That's one of the problems one runs into trying to make menus for all browsers.
Cheers,
tedd
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---
--- Begin Message ---
Are you sure that Apache is running and accepting connections to /
~michwill? Does a regular HTML page show up ok?
Yeah, static pages, and regular php pages load fine. It's only when
I bring MySQL into the mix that things go awry.
Have you checked the server error log?
If by "server" you mean Apache or PHP specifically, then yes. There
is nothing telling there.
What does your script look like where it connects? Does it simply
die() without a message? Try creating a test script with header
('Content-type: text/plain') at the top. Then print out messages
after each step. (beginning of script, opening a DB connection, etc.)
It literally dies with what I posted:
Safari can’t open the page “http://localhost/~michwill/mysqltest.php”
because the server unexpectedly dropped the connection, which
sometimes occurs when the server is busy. You might be able to open
the page later.
Oddly enough, when I use MAMP, instead of the source install, this
doesn't occur.
How are you accessing the database?
I've stripped the PHP script to simply read as follows:
<?php
header('Content-type: text/plain');
echo "Beginning PHP Script!";
$connection_error = "We apologize for the inconvenience,
but it appears that our database server is down.<br>";
$connection_error .= "Please try again later.";
$host = "localhost";
$user = "michael";
$db_pass = "michael";
$connect = mysql_connect($host,$user,$db_pass) or die
($connection_error . mysql_error());
?>
. . .the error is no different, and it doesn't output anything that
is "echo"ed. I've ensured that all permissions are in place with the
MySQL database as well. I can manually log in just fine. I'm at a
loss.
Regards,
Michael
--- End Message ---
--- Begin Message ---
I run pretty simple mail group distribution program that uses
php/mysql and the mail() function. I adapted it from an open source
script. Most of the time it runs well. But it does take a while to
run through all 150 members of the list. So I'm half glad that I
don't have a list of 1000 people or more.
Any way to optimize the mail function in terms of speed? Probably too
vague a question, sorry.
/ml
At 07:50 AM 9/2/2007, you wrote:
Stut wrote:
> Unless your script is actually hanging for the 4-6 hours this problem
> has nothing to do with PHP.
>
> How mail is delivered depends on the OS you are using, but usually it
> will get passed to a local MTA which then handles delivering it, at
> which point PHP involvement ends.
>
> I suggest you look at the Received headers in the messages your getting.
> You should be able to see which server is causing the delay.
Yup, 100% agree that it's not PHP.
Reasons for delays can include a dodgy ISP just taking a long time to
process things, or more typically some form of "greylisting" e.g. one
MTA deliberately telling the delivering MTA to P*ss off for a while -
compliant servers will resend the mail after a while at which point it
will be accepted. This is a spam prevention technique. See:
http://en.wikipedia.org/wiki/Greylisting
Col
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.484 / Virus Database: 269.13.2/983 - Release Date:
9/1/2007 4:20 PM
--- End Message ---
--- Begin Message ---
Matthew Lasar wrote:
> I run pretty simple mail group distribution program that uses php/mysql
> and the mail() function. I adapted it from an open source script. Most
> of the time it runs well. But it does take a while to run through all
> 150 members of the list. So I'm half glad that I don't have a list of
> 1000 people or more.
>
> Any way to optimize the mail function in terms of speed? Probably too
> vague a question, sorry.
Yeah it is fairly vauge.
I guess one obvious way is to ask whether or not you send the same mail
content to people but just do it 150 times? Or whether you customise the
mail to each person putting in e.g. their name at the top etc. If the
former then you can send the mails in batches of about 30-50 at a time
using the BCC header rather than a direct To header (set the To address
to e.g. yourself or a dummy address that works but is a bitbucket). That
way there will be considerably less calls to mail() to process.
The other way would be to write the mails to a database and process them
later. You could write a special cronjob that runs every few minutes and
pushes them out in the background. It could run every minute or two
(with file locking to prevent more than one instance at a time) and
either process all mails it can or just do about 50 of them and then
quit and leave the rest for the next run. Obviously you have to manage
it to make sure that it can physically catch up with how many mails are
being generated but this isn't too hard.
There are lots of other ways too - I've even seen some people program a
MySQL UDF to send mail and let the database do the work, but I would
have serious doubts about that approach for this use!!
Col
--- End Message ---
--- Begin Message ---
Matthew Lasar wrote:
I run pretty simple mail group distribution program that uses php/mysql
and the mail() function. I adapted it from an open source script. Most
of the time it runs well. But it does take a while to run through all
150 members of the list. So I'm half glad that I don't have a list of
1000 people or more.
Any way to optimize the mail function in terms of speed? Probably too
vague a question, sorry.
Have a look at the Swift Mailer package:
http://www.swiftmailer.org/
I use it to send out well over 1000 mails at a time and it works quite
fine for me. Check out the anti-flood extension for sending large batches:
$swift = new Swift(new Swift_Connection_SMTP('localhost'), 'domain.org');
/* 100 mails per batch with a 30 second pause between batches
*/
$swift->attachPlugin(new Swift_Plugin_AntiFlood(100, 30), 'anti-flood');
/* list of recipients is an object wrapping an array
*/
$recipients = new Swift_RecipientList();
$recipients->addTo('[EMAIL PROTECTED]', 'foo bar');
/* headers
*/
$message = new Swift_Message('the subject');
$message->setCharset('utf-8');
$message->setReplyTo('[EMAIL PROTECTED]');
$message->setReturnPath('[EMAIL PROTECTED]');
$message->headers->set('Errors-To', '[EMAIL PROTECTED]');
/* multipart is a breeze
*/
$message->attach(new Swift_Message_Part($plain_content));
$message->attach(new Swift_Message_Part($html_content, 'text/html'));
/* if you're sending the mails from, eg. an admin page ...
*/
set_time_limit(0);
ignore_user_abort();
flush();
/* send it out
*/
$num_sent = $swift->batchSend($message, $recipients, new
Swift_Address('[EMAIL PROTECTED]', 'from'));
This really should be rolled into the PEAR project, IMO.
brian
--- End Message ---
--- Begin Message ---
Matthew Lasar wrote:
I run pretty simple mail group distribution program that uses php/mysql
and the mail() function. I adapted it from an open source script. Most
of the time it runs well. But it does take a while to run through all
150 members of the list. So I'm half glad that I don't have a list of
1000 people or more.
Any way to optimize the mail function in terms of speed? Probably too
vague a question, sorry.
Don't use the mail function. On a unix-based system it will pass the
message directly to sendmail which will attempt to deliver the message
in realtime. When you're sending a large amount of mail that sucks.
Your best option is to switch to using a system that connects to the
SMTP server on localhost directly. That way you can dump each message on
to the local MTA quickly and then forget about it.
As an example one of the newletters I maintain has over 300,000
subscribers and the system that sends the emails (written in PHP of
course) takes less than 6 hours. The mail queue on that machine gets
very big and then it's up to the MTA to work through sending the
messages as quickly as it can (which usually takes about 28 hours).
-Stut
--
http://stut.net/
--- End Message ---
--- Begin Message ---
Stut wrote:
> Matthew Lasar wrote:
>> I run pretty simple mail group distribution program that uses
>> php/mysql and the mail() function. I adapted it from an open source
>> script. Most of the time it runs well. But it does take a while to run
>> through all 150 members of the list. So I'm half glad that I don't
>> have a list of 1000 people or more.
>>
>> Any way to optimize the mail function in terms of speed? Probably too
>> vague a question, sorry.
>
> Don't use the mail function. On a unix-based system it will pass the
> message directly to sendmail which will attempt to deliver the message
> in realtime. When you're sending a large amount of mail that sucks.
>
> Your best option is to switch to using a system that connects to the
> SMTP server on localhost directly. That way you can dump each message on
> to the local MTA quickly and then forget about it.
I don't think this is correct, at least on my system. I know this
because I deliberatly ban internal machines on my network from
delivering mail to outside server (internal LAN cannot connect to port
25 on any system other than our gateway - this is to stop any windows
machines that may sneak into my network from spamming the world!).
When I test web apps locally I have to watch to override email addresses
such that I don't try to sent to real people but when I forget, they all
end up stuck in my local machine's MTA. So for that reason, mail() must
speak to my MTA, not try to deliver directly. Perhaps it depends on your
sendmail implementation? I prefer postfix (which has a sendmail
compatible binary). YMMV.
Col.
--- End Message ---
--- Begin Message ---
Colin Guthrie wrote:
Stut wrote:
Matthew Lasar wrote:
I run pretty simple mail group distribution program that uses
php/mysql and the mail() function. I adapted it from an open source
script. Most of the time it runs well. But it does take a while to run
through all 150 members of the list. So I'm half glad that I don't
have a list of 1000 people or more.
Any way to optimize the mail function in terms of speed? Probably too
vague a question, sorry.
Don't use the mail function. On a unix-based system it will pass the
message directly to sendmail which will attempt to deliver the message
in realtime. When you're sending a large amount of mail that sucks.
Your best option is to switch to using a system that connects to the
SMTP server on localhost directly. That way you can dump each message on
to the local MTA quickly and then forget about it.
I don't think this is correct, at least on my system. I know this
because I deliberatly ban internal machines on my network from
delivering mail to outside server (internal LAN cannot connect to port
25 on any system other than our gateway - this is to stop any windows
machines that may sneak into my network from spamming the world!).
When I test web apps locally I have to watch to override email addresses
such that I don't try to sent to real people but when I forget, they all
end up stuck in my local machine's MTA. So for that reason, mail() must
speak to my MTA, not try to deliver directly. Perhaps it depends on your
sendmail implementation? I prefer postfix (which has a sendmail
compatible binary). YMMV.
It depends a lot on how your machine is configured, but the way I
described it is usually the way it works. Note that if sendmail cannot
send the messages immediately it will pass it into the local mail queue
and that's probably what's happening on your system because sendmail
will find port 25 blocked.
-Stut
--
http://stut.net/
--- End Message ---
--- Begin Message ---
Wow!
Spend $100K on a university degree in computer science, work
successfully for five years with all the major technologies, and then
get paid $25 per hour?
My auto mechanic charges an average of $99 per hour.
Sounds like a great deal for the university. Maybe the successful
candidate can work off his student loans.
Kind of like buying from the "company store", eh?
On Fri, 2007-08-31 at 11:46 -0400, Greg Gay wrote:
> Title: Web Applications Developer
>
> Open August 30, 2007,
>
> Closing September 14, 2007
>
> Formal Education: University Degree in computer science/engineering or
> related discipline
>
> Employer: University of Toronto, Faculty of Information Studies,
> Adaptive Technology Resource Centre,
>
> Description: Under the direction of the Project Manager, the successful
> applicant will take a leading role in the development of PHP web
> applications, and participate through these projects in a number of open
> source communities, assisting with community support, assisting clients
> developing functional specifications, and assisting with development and
> maintenance of a number of open source community Web sites.
> Opportunities will also be available to participate in a broad range of
> development projects under taken at the centre, working with
> international and local groups, government, corporate, health care, and
> not for profit sectors, among others.
>
> Experience: At least five years experience working in team programming
> environment. Advanced knowledge of PHP web application development.
> Working knowledge of SQL, Javascript, AJAX, JAVA, XML, SOAP, HTML, CSS
> and working in a distributed programming environment using Subversion.
> Comfortable working in both Windows and Linux environments. Working
> knowledge of Apache and Tomcat. Understanding of Web accessibility and
> working in open source development projects would be an asset
>
> Other: Flexibility, initiative and the ability to work and learn
> independently. Excellent communication skills and an ability to
> communicate technical details courteously and clearly to non-technical
> users.
>
> Starting Rate: $25/hr/CAD + 4% vacation pay
>
> Appointment Type: One year renewable contract
>
> Percentage of FTE: 100
>
> Location: Toronto, Ontario, Canada
>
> Forward Resume to [EMAIL PROTECTED]
>
--- End Message ---
--- Begin Message ---
At 1:47 PM -0400 9/3/07, mlists wrote:
Wow!
Spend $100K on a university degree in computer science, work
successfully for five years with all the major technologies, and then
get paid $25 per hour?
You can really get that much?
Cheers,
tedd
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---
--- Begin Message ---
On Sep 3, 2007, at 11:12 AM, Michael Williams wrote:
Are you sure that Apache is running and accepting connections to /
~michwill? Does a regular HTML page show up ok?
Yeah, static pages, and regular php pages load fine. It's only when
I bring MySQL into the mix that things go awry.
Have you checked the server error log?
If by "server" you mean Apache or PHP specifically, then yes. There
is nothing telling there.
What does your script look like where it connects? Does it simply
die() without a message? Try creating a test script with header
('Content-type: text/plain') at the top. Then print out messages
after each step. (beginning of script, opening a DB connection, etc.)
It literally dies with what I posted:
Safari can’t open the page “http://localhost/~michwill/mysqltest.php”
because the server unexpectedly dropped the connection, which
sometimes occurs when the server is busy. You might be able to open
the page later.
Oddly enough, when I use MAMP, instead of the source install, this
doesn't occur.
How are you accessing the database?
I've stripped the PHP script to simply read as follows:
<?php
header('Content-type: text/plain');
echo "Beginning PHP Script!";
$connection_error = "We apologize for the inconvenience,
but it appears that our database server is down.<br>";
$connection_error .= "Please try again later.";
$host = "localhost";
$user = "michael";
$db_pass = "michael";
$connect = mysql_connect($host,$user,$db_pass) or die
($connection_error . mysql_error());
?>
. . .the error is no different, and it doesn't output anything that
is "echo"ed. I've ensured that all permissions are in place with the
MySQL database as well. I can manually log in just fine. I'm at a
loss.
Regards,
Michael
--- End Message ---
--- Begin Message ---
At 1:02 PM -0400 9/3/07, Daniel Brown wrote:
> For those of you who aren't hosted with me at PilotPig
>(http://www.pilotpig.net/) but may be interested in the advancement of
>the PHP TTS module that I've been working on (if you're not aware,
>search the list archives ~May, 2007), we're unofficially at version
>0.6.6 right now.
>
> In the latest build, which so far is just on the PilotPig servers
>(and actually live for customers right now), the speech synthesis
>function works as follows:
>
> <? txt2wav($text,$fileout,$duration,$pitch,$stddev); ?>
-snip-
If anyone has any questions or anything, just let me know. I just
>wanted to apprise those on the list who were interested (some of which
>were involved) in the progress.
Daniel:
Damn, that's mondo slick. It's everything I wanted when we first
started this idea. You did a great job! Congrats!!!
You may review my first attempt at implementing your work here:
http://www.php1.net/b/speech/
This going to be great!
Cheers,
tedd
PS: If anyone has any problems with hearing this, please let us know.
--
-------
http://sperling.com http://ancientstones.com http://earthstones.com
--- End Message ---