TLDR:
When large amounts of files (array values) are in the array, the loop will iterate through all the values but only execute part of the foreach statement for some of them. When that happens, it will always affect the same files (in file order, not file name).

Detailed version:
Recently, I have written a script which scans webserver folders for new files (invoices) by name. Through using arrays the script separates the new files from the old files and inserts them as links into the body of an email to be sent out to a client at the end of the day. Each client receives one email containing all of their invoices every day. Although the loop iterates through all the values in the array without a problem, it does not execute the inside of the foreach construct correctly for each value, although it always executes it to some degree. There is no error in the php log and the server runs on an 8-core Xeon CPU and 12 GB or RAM.

Thinking that there might be too much going on at the same time, I’ve tried adding two 2-second timeouts before and after the statement and separating the long variable into separate ones with no luck. The results were still the same. During troubleshooting using different files, different methods of launching the script and running it for only one client at a time I discovered that the links which display incorrectly will always come in the same order i.e. from top down, it will be the 44th, 73rd and 102nd file every time. Really weird.

The foreach statement is simply adding a line to the email per each new invoice. The way that it doesn’t always work is that some lines (links) appear in html without the closing </a> tag or appear as a link with the right file name but without a href. Below I’ll include the php code, contents of the email and source from firefox.

Code:

if (!empty($newfiles)) {

    $subject = 'New invoice from company';

    $message = "
    <html>
    <body>
    <p>Hello ".$dirname.",</p>
    <p>Please select a number below to access the relevant invoice:</p>
    <p>
    ";

    foreach ($newfiles as $emailfile){
        $invoice = pathinfo($emailfile);
        $message .= '<a href="'.$link.'/'.$emailfile.'">'.$invoice['filename'].'</a><br/>';
    }

    $message .= "
    </p>
    <p>Thank you for your business.</p>
    <p>Kind regards,<br/>Company</p>
    </body>
    </html>";

    //Setting content-type
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
    $headers .= 'Bcc: tester@itcompany.com.au' . "\r\n";

    // From address
    $headers .= 'From: <client@client.com.au>' . "\r\n";

    mail($emailaddress, $subject, $message, $headers);

    }

Email output:

New invoice from company
noreply@company.com.au
Thu 3/12/2015 9:06 PM
To:
client@client.com.au;
Hello CLIENT,
Please select a number below to access the relevant invoice:
167205
167206
167209
167210
167213
167216
167226
167227
167232
167252
167266
167273
167277
167283
167285
167308
167321
167328
167333
167366
167368
167352
167356
167365
167370
167371
167373
167385
167388
167397
167600
167613
167615
167617
167619
167620
167627
167630
167633
167639
167660
167661
167662
167663
167665
167666
< a href="http://company.com.au/CLIENT/167667.pdf">167667
167651
167653
167656
167657
167658
167659
167667
167669
167673
167679
167682
167686
167687
167692
167695
167696
167503
167511
167526
167526
167527
167536
167560
167562
167553
167566
167566
167573
167576
167576
167577
167579
167589
167590
167596
167600
167601
167623
167626
167626
167633
167636
167635
167661
167662
167658
167661
167687
167760
167783
167793
167801
167810
167836
167862
167866
167956
167958
168013
168101
168103
168106
168118
168125
168133
168139
168160
168803
168808
168809
168810
168811
168815
168816
168817
168818
168820
168821
168826
168826
168827
168828
168829
168836
168838
168861
157567
Thank you for your business.
Kind regards,
Company

Email in html through firefox:

<div style="margin-top:16pt;margin-bottom:16pt;">Hello CLIENT,</div>

<div style="margin-top:16pt;margin-bottom:16pt;">Please select a number below to access the relevant invoice:</div>

<div style="margin-top:16pt;margin-bottom:16pt;"><a href="http://company.com.au/CLIENT/167205.pdf" target="_blank">167205</a><br>

<a href="http://company.com.au/CLIENT/167206.pdf" target="_blank">167206</a><br>

<a href="http://company.com.au/CLIENT/167209.pdf" target="_blank">167209</a><br>

<a href="http://company.com.au/CLIENT/167210.pdf" target="_blank">167210</a><br>

<a href="http://company.com.au/CLIENT/167213.pdf" target="_blank">167213</a><br>

<a href="http://company.com.au/CLIENT/167216.pdf" target="_blank">167216</a><br>

<a href="http://company.com.au/CLIENT/167226.pdf" target="_blank">167226</a><br>

<a href="http://company.com.au/CLIENT/167227.pdf" target="_blank">167227</a><br>

<a href="http://company.com.au/CLIENT/167232.pdf" target="_blank">167232</a><br>

<a href="http://company.com.au/CLIENT/167252.pdf" target="_blank">167252</a><br>

<a href="http://company.com.au/CLIENT/167266.pdf" target="_blank">167266</a><br>

<a href="http://company.com.au/CLIENT/167273.pdf" target="_blank">167273</a><br>

<a href="http://company.com.au/CLIENT/167277.pdf" target="_blank">167277</a><br>

<a href="http://company.com.au/CLIENT/167283.pdf" target="_blank">167283</a><br>

<a href="http://company.com.au/CLIENT/167285.pdf" target="_blank">167285</a><br>

<a href="" target="_blank">167308</a><br>

<a href="http://company.com.au/CLIENT/167321.pdf" target="_blank">167321</a><br>

<a href="http://company.com.au/CLIENT/167328.pdf" target="_blank">167328</a><br>

<a href="http://company.com.au/CLIENT/167333.pdf" target="_blank">167333</a><br>

<a href="http://company.com.au/CLIENT/167366.pdf" target="_blank">167366</a><br>

<a href="http://company.com.au/CLIENT/167368.pdf" target="_blank">167368</a><br>

<a href="http://company.com.au/CLIENT/167352.pdf" target="_blank">167352</a><br>

<a href="http://company.com.au/CLIENT/167356.pdf" target="_blank">167356</a><br>

<a href="http://company.com.au/CLIENT/167365.pdf" target="_blank">167365</a><br>

<a href="http://company.com.au/CLIENT/167370.pdf" target="_blank">167370</a><br>

<a href="http://company.com.au/CLIENT/167371.pdf" target="_blank">167371</a><br>

<a href="http://company.com.au/CLIENT/167373.pdf" target="_blank">167373</a><br>

<a href="http://company.com.au/CLIENT/167385.pdf" target="_blank">167385</a><br>

<a href="http://company.com.au/CLIENT/167388.pdf" target="_blank">167388</a><br>

<a href="http://company.com.au/CLIENT/167397.pdf" target="_blank">167397</a><br>

<a href="http://company.com.au/CLIENT/167600
 .pdf" target="_blank">167600</a><br>

<a href="http://company.com.au/CLIENT/167613.pdf" target="_blank">167613</a><br>

<a href="http://company.com.au/CLIENT/167615.pdf" target="_blank">167615</a><br>

<a href="http://company.com.au/CLIENT/167617.pdf" target="_blank">167617</a><br>

<a href="http://company.com.au/CLIENT/167619.pdf" target="_blank">167619</a><br>

<a href="http://company.com.au/CLIENT/167620.pdf" target="_blank">167620</a><br>

<a href="http://company.com.au/CLIENT/167627.pdf" target="_blank">167627</a><br>

<a href="http://company.com.au/CLIENT/167630.pdf" target="_blank">167630</a><br>

<a href="http://company.com.au/CLIENT/167633.pdf" target="_blank">167633</a><br>

<a href="http://company.com.au/CLIENT/167639.pdf" target="_blank">167639</a><br>

<a href="http://company.com.au/CLIENT/167660.pdf" target="_blank">167660</a><br>

<a href="http://company.com.au/CLIENT/167661.pdf" target="_blank">167661</a><br>

<a href="http://company.com.au/CLIENT/167662.pdf" target="_blank">167662</a><br>

<a href="http://company.com.au/CLIENT/167663.pdf" target="_blank">167663</a><br>

<a href="http://company.com.au/CLIENT/167665.pdf" target="_blank">167665</a><br>

<a href="http://company.com.au/CLIENT/167666.pdf" target="_blank">167666</a><br>

&lt; a href="http://company.com.au/CLIENT/167667.pdf"&gt;167667<br>

<a href="http://company.com.au/CLIENT/167651.pdf" target="_blank">167651</a><br>

<a href="http://company.com.au/CLIENT/167653.pdf" target="_blank">167653</a><br>

<a href="http://company.com.au/CLIENT/167656.pdf" target="_blank">167656</a><br>

<a href="http://company.com.au/CLIENT/167657.pdf" target="_blank">167657</a><br>

<a href="http://company.com.au/CLIENT/167658.pdf" target="_blank">167658</a><br>

<a href="http://company.com.au/CLIENT/167659.pdf" target="_blank">167659</a><br>

<a href="http://company.com.au/CLIENT/167667.pdf" target="_blank">167667</a><br>

<a href="http://company.com.au/CLIENT/167669.pdf" target="_blank">167669</a><br>

<a href="http://company.com.au/CLIENT/167673.pdf" target="_blank">167673</a><br>

<a href="http://company.com.au/CLIENT/167679.pdf" target="_blank">167679</a><br>

<a href="http://company.com.au/CLIENT/167682.pdf" target="_blank">167682</a><br>

<a href="http://company.com.au/CLIENT/167686.pdf" target="_blank">167686</a><br>

<a href="http://company.com.au/CLIENT/167687.pdf" target="_blank">167687</a><br>

<a href="http://company.com.au/CLIENT/167692.pdf" target="_blank">167692</a><br>

<a href="" target="_blank">167695</a><br>

<a href="http://company.com.au/CLIENT/167696.pdf" target="_blank">167696</a><br>

<a href="http://company.com.au/CLIENT/167503.pdf" target="_blank">167503</a><br>

<a href="http://company.com.au/CLIENT/167511.pdf" target="_blank">167511</a><br>

<a href="http://company.com.au/CLIENT/167526.pdf" target="_blank">167526</a><br>

<a href="http://company.com.au/CLIENT/167526.pdf" target="_blank">167526</a><br>

<a href="http://company.com.au/CLIENT/167527.pdf" target="_blank">167527</a><br>

<a href="http://company.com.au/CLIENT/167536.pdf" target="_blank">167536</a><br>

<a href="http://company.com.au/CLIENT/167560.pdf" target="_blank">167560</a><br>

<a href="http://company.com.au/CLIENT/167562.pdf" target="_blank">167562</a><br>

<a href="http://company.com.au/CLIENT/167553.pdf" target="_blank">167553</a><br>

<a href="http://company.com.au/CLIENT/167566.pdf" target="_blank">167566</a><br>

<a href="http://company.com.au/CLIENT/167566.pdf" target="_blank">167566</a><br>

<a href="http://company.com.au/CLIENT/167573.pdf" target="_blank">167573</a><br>

<a href="http://company.com.au/CLIENT/167576.pdf" target="_blank">167576</a><br>

<a href="http://company.com.au/CLIENT/167576.
 pdf" target="_blank">167576</a><br>

<a href="http://company.com.au/CLIENT/167577.pdf" target="_blank">167577</a><br>

<a href="http://company.com.au/CLIENT/167579.pdf" target="_blank">167579</a><br>

<a href="http://company.com.au/CLIENT/167589.pdf" target="_blank">167589</a><br>

<a href="http://company.com.au/CLIENT/167590.pdf" target="_blank">167590</a><br>

<a href="http://company.com.au/CLIENT/167596.pdf" target="_blank">167596</a><br>

<a href="http://company.com.au/CLIENT/167600.pdf" target="_blank">167600</a><br>

<a href="http://company.com.au/CLIENT/167601.pdf" target="_blank">167601</a><br>

<a href="http://company.com.au/CLIENT/167623.pdf" target="_blank">167623</a><br>

<a href="http://company.com.au/CLIENT/167626.pdf" target="_blank">167626</a><br>

<a href="http://company.com.au/CLIENT/167626.pdf" target="_blank">167626</a><br>

<a href="http://company.com.au/CLIENT/167633.pdf" target="_blank">167633</a><br>

<a href="http://company.com.au/CLIENT/167636.pdf" target="_blank">167636</a><br>

<a href="http://company.com.au/CLIENT/167635.pdf" target="_blank">167635</a><br>

<a href="http://company.com.au/CLIENT/167661.pdf" target="_blank">167661</a><br>

<a href="http://company.com.au/CLIENT/167662.pdf" target="_blank">167662</a><br>

<a href="http://company.com.au/CLIENT/167658.pdf" target="_blank">167658</a><br>

<a href="http://company.com.au/CLIENT/167661.pdf" target="_blank">167661</a><br>

<a href="http://company.com.au/CLIENT/167687.pdf" target="_blank">167687</a><br>

<a href="http://company.com.au/CLIENT/167760.pdf" target="_blank">167760</a><br>

<a href="http://company.com.au/CLIENT/167783.pdf" target="_blank">167783</a><br>

<a href="http://company.com.au/CLIENT/167793.pdf" target="_blank">167793</a><br>

<a href="http://company.com.au/CLIENT/167801.pdf" target="_blank">167801</a><br>

<a href="http://company.com.au/CLIENT/167810.pdf" target="_blank">167810</a><br>

<a href="http://company.com.au/CLIENT/167836.pdf" target="_blank">167836</a><br>

<a href="http://company.com.au/CLIENT/167862.pdf" target="_blank">167862</a><br>

<a href="http://company.com.au/CLIENT/167866.pdf" target="_blank">167866</a><br>

<a href="http://company.com.au/CLIENT/167956.pdf" target="_blank">167956</a><br>

<a href="http://company.com.au/CLIENT/167958.pdf" target="_blank">167958</a><br>

<a href="http://company.com.au/CLIENT/168013.pdf" target="_blank">168013</a><br>

<a href="http://company.com.au/CLIENT/168101.pdf" target="_blank">168101</a><br>

<a href="" target="_blank">168103</a><br>

<a href="http://company.com.au/CLIENT/168106.pdf" target="_blank">168106</a><br>

<a href="http://company.com.au/CLIENT/168118.pdf" target="_blank">168118</a><br>

<a href="http://company.com.au/CLIENT/168125.pdf" target="_blank">168125</a><br>

<a href="http://company.com.au/CLIENT/168133.pdf" target="_blank">168133</a><br>

<a href="http://company.com.au/CLIENT/168139.pdf" target="_blank">168139</a><br>

<a href="http://company.com.au/CLIENT/168160.pdf" target="_blank">168160</a><br>

<a href="http://company.com.au/CLIENT/168803.pdf" target="_blank">168803</a><br>

<a href="http://company.com.au/CLIENT/168808.pdf" target="_blank">168808</a><br>

<a href="http://company.com.au/CLIENT/168809.pdf" target="_blank">168809</a><br>

<a href="http://company.com.au/CLIENT/168810.pdf" target="_blank">168810</a><br>

<a href="http://company.com.au/CLIENT/168811.pdf" target="_blank">168811</a><br>

<a href="http://company.com.au/CLIENT/168815.pdf" target="_blank">168815</a><br>

<a href="http://company.com.au/CLIENT/168816.pdf" target="_blank">168816</a><br>

<a href="http://company.com.au/CLIENT/168817.pdf" target="_blank">168817</a><br>

<a href="http://company.com.au/CLIENT/168818.p
 df" target="_blank">168818</a><br>

<a href="http://company.com.au/CLIENT/168820.pdf" target="_blank">168820</a><br>

<a href="http://company.com.au/CLIENT/168821.pdf" target="_blank">168821</a><br>

<a href="http://company.com.au/CLIENT/168826.pdf" target="_blank">168826</a><br>

<a href="http://company.com.au/CLIENT/168826.pdf" target="_blank">168826</a><br>

<a href="http://company.com.au/CLIENT/168827.pdf" target="_blank">168827</a><br>

<a href="http://company.com.au/CLIENT/168828.pdf" target="_blank">168828</a><br>

<a href="http://company.com.au/CLIENT/168829.pdf" target="_blank">168829</a><br>

<a href="http://company.com.au/CLIENT/168836.pdf" target="_blank">168836</a><br>

<a href="http://company.com.au/CLIENT/168838.pdf" target="_blank">168838</a><br>

<a href="http://company.com.au/CLIENT/168861.pdf" target="_blank">168861</a><br>

<a href="http://company.com.au/CLIENT/157567.pdf" target="_blank">157567</a><br>

</div>

Also on StackOverflow

Recommended Answers

All 2 Replies

$message .= '<a href="'.$link.'/'.$emailfile.'">'.$invoice['filename'].'</a><br/>';

Are all your variables html/url encoded? If they are not, some may break your html.

Member Avatar for diafol

Posting the same problem on multiple forums, while good for you, is not so great for everybody else. You'll find that you may get many similar responses and contributors will be wasting their time trying to help you as your solution may come from a different forum, whithout them being aware of it. Some friendly advice - pick a forum, stick with it for a short while and if the solution doesn't present itself, pick another. In addition, posting duplicate content on many sites will make them look as though they're scraping content from elsewhere and impact badly on them with regard to search engine rankings.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.