Try adding chdir(dirname(__FILE__)) at the top of the script.
On 12 November 2010 17:36, Brendan Brink <[email protected]> wrote: > hi there, > > still having difficulties with this one: > > What I want to accomplish is: > > 1. Create a CRON job that checks an email address for messages every minute > 2. Take each message, extract the attachments, then send a new email to a > different address and add the attachments to it. > > Have been able to successfully do this with a PHP script, however when I try > and run through a CRON job have issues with the file_put_content line > > Code is below... > > function extract_attachments($connection, $message_number) { > > $attachments = array(); > $structure = imap_fetchstructure($connection, $message_number); > > if(isset($structure->parts) && count($structure->parts)) { > > for($i = 0; $i < count($structure->parts); $i++) { > > $attachments[$i] = array( > 'is_attachment' => false, > 'filename' => '', > 'name' => '', > 'attachment' => '' > ); > > if($structure->parts[$i]->ifdparameters) { > foreach($structure->parts[$i]->dparameters as $object) { > if(strtolower($object->attribute) == 'filename') { > $attachments[$i]['is_attachment'] = true; > $attachments[$i]['filename'] = $object->value; > } > } > } > > if($structure->parts[$i]->ifparameters) { > foreach($structure->parts[$i]->parameters as $object) { > if(strtolower($object->attribute) == 'name') { > $attachments[$i]['is_attachment'] = true; > $attachments[$i]['name'] = $object->value; > } > } > } > > if($attachments[$i]['is_attachment']) { > $attachments[$i]['attachment'] = imap_fetchbody($connection, > $message_number, $i+1); > if($structure->parts[$i]->encoding == 3) { // 3 = BASE64 > $attachments[$i]['attachment'] = > base64_decode($attachments[$i]['attachment']); > } > elseif($structure->parts[$i]->encoding == 4) { // 4 = > QUOTED-PRINTABLE > $attachments[$i]['attachment'] = > quoted_printable_decode($attachments[$i]['attachment']); > } > } > > } > > } > > return $attachments; > > } > > > $server = "pop3.####.co.nz"; > $login = "#...@#####.co.nz"; > $password = "#####"; > > > $connection = imap_open('{pop3.webhost.co.nz:110/pop3}', $login, $password); > $count = imap_num_msg($connection); > echo "MESSAGES TO PROCESS: ".$count; > for($a = 1; $a <= $count; $a++) { > > > $structure = imap_fetchstructure($connection, $a); > //print_r($structure); > $header = imap_headerinfo($connection, $a); > //print_r($header); > //$raw_body = imap_body($connection, $i); > //print_r($raw_body); > > $attachments = extract_attachments($connection, $a); > > > $thesubject = $header->subject; > $blanksubject = $header->Subject; > > $numberofattachments = 0; > > > foreach ($attachments as $attachment) { > > if ($attachment['is_attachment']) { > > $numberofattachments++; > > echo $attachment['filename']; > str_replace(" ","_",$attachment['filename']); > > $testfilename = "file_uploads/INVOICE_".$attachment['filename']; > $bytes = file_put_contents($testfilename, > $attachment['attachment']); > > //WHEN GETS TO THIS NO BYTES ARE RETURNED: > > and get this message from the CRON JOB: > Warning: file_put_contents(file_uploads/INVOICE_Order 41344.pdf): failed to > open stream: No such file or directory in > /import/home/folder1/folder2/folder3/folder4/folder5/process_inbox.php on > line 97 > > I am thinking maybe a path issue? but has anyone any advice / > recommendations? > > The file_uploads is within the folder5 directory. > > Works fine when running the script without CRON job. > > > > -- > NZ PHP Users Group: http://groups.google.com/group/nzphpug > To post, send email to [email protected] > To unsubscribe, send email to > [email protected] -- Chris Hope The Electric Toolbox Ltd Email: [email protected] Web: www.electrictoolbox.com Phone: +64 9 522 9531 Mobile: +64 21 866 529 -- NZ PHP Users Group: http://groups.google.com/group/nzphpug To post, send email to [email protected] To unsubscribe, send email to [email protected]
