Аттачмент-картинка (Shop Script Free)
32 сообщения
#15 лет назад
Всем привет!Есть проблема в Shop Script. Заказчик пожелал сделать уведомление о заказе в форме счета с печатью и росписью (картинка jpg). В стандартном варианте в файле order_place.php используется функция mail(). Письмо без вложения. Чтобы прикрепить печать и роспись нужно отправлять письмо с вложением. Нашел в сети функцию XMail(). После оформления заказа и нажатия на кнопку выводятся ошибки:
Warning: fopen(/includes/stamp.jpg) : failed to open stream: No such file or directory in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 12
Warning: filesize() : stat failed for /includes/stamp.jpg in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 30
Warning: fread(): supplied argument is not a valid stream resource in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 30
Warning: Cannot modify header information - headers already sent by (output started at /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php:12) in /home/ХХХХХХХХ/domains/ХХХХХХХХ/public_html/includes/order_place.php on line 135
Уведомление о заказе приходит, но изображение в письме не отображается и не открывается. Кроме того, хостер помечает письмо как спам :-(
Может кто-то уже использовал функцию XMail()? Или как по-другому можно приатачить изображение.
Файл order_place.php
<?php
/*****************************************************************************
* *
* Shop-Script FREE *
* Copyright (c) 2005 WebAsyst LLC. All rights reserved. *
* *
****************************************************************************/
function XMail( $from, $to, $subj, $text, $filename)
{
$f = fopen($filename,"rb");
$un = strtoupper(uniqid(time()));
$head = "From: $from\n";
$head .= "To: $to\n";
$head .= "Subject: $subj\n";
$head .= "Reply-To: $from\n";
$head .= "Mime-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"----------".$un."\"\n\n";
$zag = "------------".$un."\nContent-Type:text/html;\n";
$zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag .= "------------".$un."\n";
$zag .= "Content-Type: application/octet-stream;";
$zag .= "name=\"".basename($filename)."\"\n";
$zag .= "Content-Transfer-Encoding:base64\n";
$zag .= "Content-Disposition:attachment;";
$zag .= "filename=\"".basename($filename)."\"\n\n";
$zag .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";
if (!@mail("$to", "$subj", $zag, $head))
return 0;
else
return 1;
}
//place order: save to the database, send notifications, gateway processing
if (isset($_GET)) //show 'order successful' page
{
$smarty->assign("order_id", $_SESSION);
$smarty->assign("order_amount", $_SESSION);
$smarty->assign("main_content_template", "order_place.tpl.html");
$smarty->assign("order_is_placed", $_GET);
}
else if (isset($_POST)) //place order
{
//shopping cart items count
$c = 0;
if (isset($_SESSION))
for ($j=0; $j<count($_SESSION); $j++)
if ($_SESSION) $c += $_SESSION;
//not empty?
if (isset($_SESSION) && $c)
{
//insert order into database
//validation
if (preg_match('/^+$/',$_POST)) $post_phone = $_POST; else $post_phone =
mysql_real_escape_string($_POST);
if (preg_match('/+@+.+/',$_POST)) $post_email =
$_POST; else $post_email = mysql_real_escape_string($_POST);
db_query("insert into ".ORDERS_TABLE." (order_time, cust_firstname, cust_lastname, cust_email,
cust_country, cust_zip, cust_state, cust_city, cust_address, cust_phone) values
('".get_current_time()."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".$post_email."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_escape_string($_POST)."','".mysql_real_
escape_string($_POST)."','".$post_phone."');") or die (db_error());
$oid = db_insert_id(); //order ID
//now move shopping cart content to the database
$k = 0; //total cart value
$products = array();
$adm = ""; //order notification for administrator
for ($i=0; $i<count($_SESSION); $i++)
if ($_SESSION)
{
$q = db_query("SELECT name, Price, product_code FROM ".PRODUCTS_TABLE." WHERE
productID='".$_SESSION."'") or die (db_error());
if ($r = db_fetch_row($q))
{
//product info
$tmp = array(
$_SESSION,
$r,
$_SESSION,
($_SESSION*$r)." ".$currency_iso_3,
$r
);
//store ordered products info into database
$articul = trim($tmp) ? "."] " : "";
db_query("insert into ".ORDERED_CARTS_TABLE." (orderID, productID, name,
Price, Quantity) values ('$oid', '".$tmp."', '".$articul.$tmp."', '".$r."', '".$tmp."');");
$products = $tmp;
//update order amount
$k += $_SESSION*$r;
//order notification for administrator - update
$adm .= $articul.$tmp." (x".$tmp."): ".$tmp."\n";
}
db_query("UPDATE ".PRODUCTS_TABLE." SET in_stock=in_stock-".$tmp." WHERE productID=".$tmp) or die (db_error());
}
//assign order content to smarty
$smarty_mail->assign("order_content", $products);
$smarty_mail->assign("order_total", $k." ".$currency_iso_3);
$smarty_mail->assign("order_id", $oid);
$smarty_mail->assign("order_custname", $_POST." ".$_POST);
$smarty_mail->assign("order_shipping_address", $_POST."\n".$_POST."
".$_POST." ".$_POST."\n".$_POST);
$_SESSION = $oid;
$_SESSION = $k;
//send message to customer
XMail("From:
\"".CONF_SHOP_NAME."\"<".CONF_GENERAL_EMAIL.">\n".stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path:
<".CONF_GENERAL_EMAIL.">", $_POST, EMAIL_CUSTOMER_ORDER_NOTIFICATION_SUBJECT,
$smarty_mail->fetch("order_notification.tpl.html"), "/includes/stamp.jpg");
//notification for administrator
$od = STRING_ORDER_ID.": $oid\n\n";
$adm .= "\n".CUSTOMER_FIRST_NAME." ".$_POST."\n".CUSTOMER_LAST_NAME."
".$_POST."\n".CUSTOMER_COUNTRY.": ".$_POST."\n".CUSTOMER_ADDRESS.": ".$_POST.",
".$_POST.", ".$_POST.", ".$_POST."\n".CUSTOMER_PHONE_NUMBER.":
".$_POST."\n".CUSTOMER_EMAIL.": ".$_POST;
mail(CONF_ORDERS_EMAIL, EMAIL_ADMIN_ORDER_NOTIFICATION_SUBJECT, $od.$adm, "From:
\"".CONF_SHOP_NAME."\"<".CONF_GENERAL_EMAIL.">\n".stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path:
<".CONF_GENERAL_EMAIL.">");
unset($_SESSION);
unset($_SESSION);
//show order placement result
header("Location: index.php?order_placement_result=1");
}
else //empty shopping cart
{
header("Location: index.php?shopping_cart=yes");
}
}
?>
1322 сообщения
#15 лет назад
Fopen(/includes/stamp.jpg)Файл то там лежит? Права на чтение дали?
Попробуйте в начало адреса файла точку поставить.
248 сообщений
#15 лет назад
Warning: fopen(/includes/stamp.jpg)"/includes/stamp.jpg"
Этот путь относительно корня, там врядли ваш штамп будет лежать. Укажите путь относительно скрипта через dirname(__FILE__).'/includes/stamp.jpg' например так, если штамп лежит рядом в подпапке includes
32 сообщения
#15 лет назад
Спасибо. Сделал так , как Вы писали. Ошибки изчезли, только уведомление о заказе не приходит вообще :-( Приходит только сообщение админу, что есть новый заказ...Права 777
205 сообщений
#15 лет назад
Так спам фильтр теперь его режет :-Dя бы сделал html письмо, а картинки грузил вы с сервера.
32 сообщения
#15 лет назад
Цитата ("e1it3"):Так спам фильтр теперь его режет :-D
я бы сделал html письмо, а картинки грузил вы с сервера.
Спасибо...попробую и это...