Drupal по простоте? 🤪 Похоже, я что-то пропустил...
Очень доволен сотрудничеством. За короткий срок и оптимальную сумму денег получил 7 (семь) вариантов логотипа, вместо одного!
Под эти пункты wp подходит без проблем. Да и куча других движков тоже.
http://shophelp.ru/wp-content/themes/newsworld-1.0.0/js/fancybox/jquery.easing-1.4.pack.js - несуществует, уходит 2.5с на загрузку
http://shophelp.ru/wp-content/themes/newsworld-1.0.0/thumbopen.php?src=http%3A%2F%2Fshophelp.ru%2Fwp-content%2Fuploads%2F2011%2F07%2F20110731_extremewedges.jpg&w=78&h=50&zc=1&a=t&q=100 - более 2-х секунд. Зачем статичные вещи, которые не меняются, выводить через php?
http://shophelp.ru/wp-content/themes/newsworld-1.0.0/thumbopen.php?src=http%3A%2F%2Fshophelp.ru%2Fwp-content%2Fuploads%2F2011%2F08%2F13.png&w=138&h=75&zc=1&a=t&q=100 - почти 4 секунды на загрузку.
И т.д. Вообще, основная проблема - куча тумб. Обдумайте, как это оптимизировать. Например, в коде должны быть прямые пути к тумбам, а через апач обрабатывать, если файл не существует - обрабатывать через php. Тогда будет работать значительно быстрее.
Для программера - час работы на все. Готового, к сожалению, не знаю.
Покажу тестовый код, дальше сами ;)
<?php class Mailer { protected static function write_smtp_response($socket, $msg) { $msg = $msg."\r\n"; socket_write($socket, $msg, strlen($msg)); } protected static function read_smtp_answer($socket) { $read = socket_read($socket, 1024); if ($read{0} != '2' && $read{0} != '3') { if (!empty($read)) { throw new Exception('SMTP failed: '.$read."\r\n"); } else { throw new Exception('Unknown error'."\r\n"); } } } protected static function quoted_printable_encode($input, $line_max = 75) { $hex = array('0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'); $lines = preg_split("/(?:\r\n|\r|\n)/", $input); $linebreak = "=0D=0A=\r\n"; /* the linebreak also counts as characters in the mime_qp_long_line * rule of spam-assassin */ $line_max = $line_max - strlen($linebreak); $escape = "="; $output = ""; $cur_conv_line = ""; $length = 0; $whitespace_pos = 0; $addtl_chars = 0; // iterate lines for ($j=0; $j<count($lines); $j++) { $line = $lines[$j]; $linlen = strlen($line); // iterate chars for ($i = 0; $i < $linlen; $i++) { $c = substr($line, $i, 1); $dec = ord($c); $length++; if ($dec == 32) { // space occurring at end of line, need to encode if (($i == ($linlen - 1))) { $c = "=20"; $length += 2; } $addtl_chars = 0; $whitespace_pos = $i; } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { $h2 = floor($dec/16); $h1 = floor($dec%16); $c = $escape . $hex["$h2"] . $hex["$h1"]; $length += 2; $addtl_chars += 2; } // length for wordwrap exceeded, get a newline into the text if ($length >= $line_max) { $cur_conv_line .= $c; // read only up to the whitespace for the current line $whitesp_diff = $i - $whitespace_pos + $addtl_chars; /* the text after the whitespace will have to be read * again ( + any additional characters that came into * existence as a result of the encoding process after the whitespace) * * Also, do not start at 0, if there was *no* whitespace in * the whole line */ if (($i + $addtl_chars) > $whitesp_diff) { $output .= substr($cur_conv_line, 0, (strlen($cur_conv_line) - $whitesp_diff)) . $linebreak; $i = $i - $whitesp_diff + $addtl_chars; } else { $output .= $cur_conv_line . $linebreak; } $cur_conv_line = ""; $length = 0; $whitespace_pos = 0; } else { // length for wordwrap not reached, continue reading $cur_conv_line .= $c; } } // end of for $length = 0; $whitespace_pos = 0; $output .= $cur_conv_line; $cur_conv_line = ""; if ($j<=count($lines)-1) { $output .= $linebreak; } } // end for return trim($output); } public static function send($email, $subject, $text, $headers = '', $server = '127.0.0.1'){ $send_start = microtime(TRUE); $result = FALSE; $boundary = '_=_boundary_' . strtoupper(uniqid(time())) . '_=_'; $headers .= 'Content-Type: multipart/related;' . "\r\n" . ' boundary="' . $boundary . '"' . "\r\n"; $boundary = '--' . $boundary; $text = $boundary . "\r\n" . "Content-Type: text/html; charset=windows-1251\r\n" . "Content-Transfer-Encoding: quoted-printable\r\n\r\n" . self::quoted_printable_encode($text) . "\r\n\r\n"; try { $socket_create = microtime(TRUE); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\r\n"); echo 'socket create: ' . (microtime(TRUE) - $socket_create) . "<br />\r\n"; $socket_connect = microtime(TRUE); $result = socket_connect($socket, $server, 25); if ($result === false) throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\r\n"); echo 'socket connect: ' . (microtime(TRUE) - $socket_connect) . "<br />\r\n"; $smtp_answer = microtime(TRUE); self::read_smtp_answer($socket); echo 'smtp answer: ' . (microtime(TRUE) - $smtp_answer) . "<br />\r\n"; $smtp_write = microtime(TRUE); self::write_smtp_response($socket, 'MAIL FROM:<info@site.ru>'); echo 'smtp write MAIL FROM: ' . (microtime(TRUE) - $smtp_write) . "<br />\r\n"; self::read_smtp_answer($socket); $smtp_write = microtime(TRUE); self::write_smtp_response($socket, 'RCPT TO:<'.$email.'>'); echo 'smtp write RCPT TO: ' . (microtime(TRUE) - $smtp_write) . "<br />\r\n"; self::read_smtp_answer($socket); $smtp_write = microtime(TRUE); self::write_smtp_response($socket, 'DATA'); echo 'smtp write DATA: ' . (microtime(TRUE) - $smtp_write) . "<br />\r\n"; self::read_smtp_answer($socket); $smtp_write = microtime(TRUE); $message = 'To: ' . $email . "\r\n"; $message .= 'Subject: ' . $subject . "\r\n"; $message .= $headers . "\r\n"; $message .= $text; self::write_smtp_response($socket, $message."\r\n."); echo 'smtp write MESSAGE: ' . (microtime(TRUE) - $smtp_write) . "<br />\r\n"; self::read_smtp_answer($socket); $smtp_write = microtime(TRUE); self::write_smtp_response($socket, 'QUIT'); echo 'smtp write QUIT: ' . (microtime(TRUE) - $smtp_write) . "<br />\r\n"; self::read_smtp_answer($socket); $result = TRUE; } catch (Exception $e) { echo "\r\nError: ".$e->getMessage(); } echo 'send ok: ' . (microtime(TRUE) - $send_start) . "<br /><br />\r\n\r\n"; return $result; } }
На этом коде я тестировал... Куча лишнего, но кому надо - разберется быстро ;)
P.S.: кое-что вырезал, т.к. на пост ограничение в 10к символов.
По поводу вдс не скажу, но скажу как не надо делать. Не используйте php-функцию mail, да и smtp тоже не желательно. Делал рассылку. 10к писем через mail рассылались несколько часов, через smtp час-полтора. Когда рассылка увеличилась до 50к smtp уже рассылало часов 6, что не приемлимо для нас было. Переписал на сокеты + несколько ip - рассылается 60к за час-полтора.
P.S.: не забудьте ограничения на рассылке поставить (по времени и количеству) + соблюдайте все правила для рассылок (линки выше). Иначе в бан попадете в первой же рассылке.
Бюджет и точные задачи в ЛС plz.
Не хочется переговариваться, но... Эта ситуация была после того, как выяснилось, что офф.передача не возможна и прошел почти месяц, после аукциона. Верно? Вы реально считаете, что кто-то должен держать деньги месяц и ждать, когда у вас получится наконец-то оформить все должным образом?
В любом случае, удачи в продаже.
Можно коротко узнать, чем скрипт лучше скрипта Тормоза?