+380(66)433-69-36 | |
+380(66)433-69-36 | |
+380(66)433-69-36 |
- BitLocker с GUI под linux
- Ищем вирус elTest
- Работаем с бесплатным SSL сертификатом Letsencrypt с помощью certbot
- Синхронизация ресурсов с удаленного сервера локально
- Применение нестандартного SEO и статус 404
- MySQL синхронизируем права с разных серверов
- IPSec VPN соединение между офисами.
- "Зеркало" сайта на стороне. Донастраиваем nginx
- Дефрагментация таблиц всех баз MySQL
- Месяц в родительном падеже strftime PHP
- INIT скрипт для Dropbox
- osCommerce VAM Edition 226. Ошибки
- PositiveSSL порядок сертификатов
- osCommerce. Создаем модуль доставки
- Восстановление mySQL баз данных
- osCommerce.Перенос магазина в другой домен
- osCommerce.Прячем адмику
- osCommerce. Продление жизни сессий
- osCommerce. Создаем платежный модуль
- 10 причин выбрать нас
- GRUB2 восстановление
- osCommerce не пересчитывает общую сумму заказа
- Список потенциально опасных скриптов
- Отправка файлов из Dropbox по e-mail
- "Черный список" почтовых доменов
- Боремся с назойливыми иностранцами
- Яндекс-Диск, и стоит ли им пользоваться.
- Обновление модуля Интеркассы для osCommerce
- Веб-почта на сайте хостинга
- Подключение Outlook Express к хостингу
osCommerce VAM Edition 226. Ошибки
Последний на сегодня, вернее уже на совсем вчера выпуск магазина можно сказать, изобилует ляпами.
Это отчасти связано с тем, что был переход на mysqli, кроме того некорректно работает замена "алтернативного" заказа "быстрым". В этом материале будет собираться информация именно по этой версии по мере нахождения ляпов - как откровенных ошибок, так и ошибок по недосмотру.
1. В SMART Checkout не запоминает сразу метод платежа и доставки.
Это связано с тем, что динамическая подгрузка методов платежа и доставки не отображается в соответствующих переменных формы, которая отправляется на подтверждение. Единственно "нормальное" решение - переопределить имена загружаемых данных, и навесить триггер на их изменение с тем, чтобы в "скрытой" переменной с именем shipping и payment отображать реальные выбранные методы. Скорее все дело в том, как работает браузер - возможно со временем ошибка уйдет - но до сих пор существует.
2. Переход на MySQLi - не отображен в файлах конфигурации /includes/configure.php, /admin/includes/configure.php - поэтому сессии начинают хранится в файлах, вместо БД. Единственный путь решения - переопределить переменную define('STORE_SESSIONS', 'mysqli');. В общем-то это не страшно, но... дело в том что в разных местах магазина данные сессии размещенные в файлах читаются из разных источников - и соответственно возможно "не нахождение" данных сессий в разных скриптах магазина. Так, даже если задается путь сохранения файлов define('SESSION_WRITE_DIRECTORY', DIR_FS_CATALOG . 'temp/'); или путь в настройках сесссий - он реально будет искать файлы по пути файлов сессии PHP по-молчанию. session_save_path(). т.е. при работае с файловыми сессиями могут быть проблемы.
3. В HTML редакторе админки при попытке выбрать картинку из загруженных - появляется надпись forbidden. Она не имеет никакого отношения к реальным файловым доступам и формируется в файле /admin/includes/javascript/tiny_mce/plugins/ajaxfilemanager/inc/zencart.auth.php. Судя по логике работы - этот файл не менялся, а на тестировании не всплыли проблемы. А проблема одна - файл "авторизации" пытается оперировать с данными - которых реально не существует. Чтобы не описывать все- проще привести исправленный файл целиком:
/**
* Verify authorization zen-cart admin
*
* @package Admin
* @copyright Copyright 2005-2010 Andrew Berezin eCommerce-Service.com
* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
* @version $Id: zencart.auth.php 1.6 20.02.2011 13:33:52 AndrewBerezin $
*/
$_SESSION['customers_status_id'] = 1;
if (isset($_GET['sid']) && isset($_GET['vam'])) {
$dir_ws_admin = preg_replace('/[^a-zA-Z0-9\-_]/', '', $_GET['vam']) . '/';
$dir_fs_admin = str_replace('\\', '/', __FILE__);
$dir_fs_admin = substr($dir_fs_admin, 0, strpos($dir_fs_admin, '/includes/javascript/tiny_mce/plugins/ajaxfilemanager/')) . '/';
$cwd = getcwd();
chdir($dir_fs_admin);
if (file_exists('includes/local/configure.php')) {
include('includes/local/configure.php');
}
if (file_exists('includes/configure.php')) {
include('includes/configure.php');
}
if (!defined('SESSION_WRITE_DIRECTORY')) define('SESSION_WRITE_DIRECTORY', session_save_path());
if (defined('DB_DATABASE')) {
if (($zen_mysqli_link = @mysqli_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD, DB_DATABASE))) {
if (!defined('DB_PREFIX')) define('DB_PREFIX', '');
// Modified piece of code from whos_online.php
$info = $_GET['sid'];
$session_data = '';
if (STORE_SESSIONS == 'mysqli') {
$session_data_query = mysqli_query($zen_mysqli_link,"select value from " . DB_PREFIX . "sessions
WHERE sesskey = '" . $info . "'");
if ($session_data = mysqli_fetch_array($session_data_query, MYSQLI_ASSOC)) {
$session_data = trim($session_data['value']);
}
} else {
if (!defined('SESSION_WRITE_DIRECTORY')) {
$session_write_directory_query = mysqli_query($zen_mysqli_link,"SELECT * FROM " . DB_PREFIX .
"configuration WHERE configuration_key='SESSION_WRITE_DIRECTORY'", $zen_mysqli_link);
if (mysqli_num_rows($session_write_directory_query) > 0) {
$session_write_directory = mysqli_fetch_array($session_write_directory_query, MYSQLI_ASSOC);
$session_write_directory = $session_write_directory['configuration_value'];
}
} else {
// $session_write_directory = SESSION_WRITE_DIRECTORY;
$session_write_directory = session_save_path();
}
$session_file = $session_write_directory . '/sess_' . $info;
if ( (file_exists($session_file)) && (filesize($session_file) > 0) ) {
$session_data = file($session_file);
$session_data = trim(implode('', $session_data));
}
}
$hardenedStatus = FALSE;
$marker='login_groups_id|';
if (strpos($session_data,$marker)!==false){
$suffix=substr($session_data,strpos($session_data,$marker)+(strlen($marker)),strlen($session_data));
if (preg_match('|s[\:\d]+"(\d+)";|',$suffix,$arr)){
if (($arr[1]==1)||($arr[1]==2)){
$_SESSION['customers_status_id'] = 0;
}
}
}
}
if (isset($zen_mysqli_link) && is_resource($zen_mysqli_link)) {
mysqli_close($zen_mysqli_link);
unset($zen_mysqli_link);
}
}
chdir($cwd);
}else{$_SESSION['customers_status_id'] = 1;}
if ($_SESSION['customers_status_id'] == 0) {
$_SESSION[$auth->__loginIndexInSession] = true;
} else {
header('HTTP/1.1 403 Forbidden');
echo 'Forbidden';
exit(0);
}
4. В HTML редакторе при вызове из окна картинок их выбор появляется надпись "Forbidden".
Вся проблема в инициализации плагина ajaxfilemanager. Хотя в свое время, я делал упор на эту ошибку, автор наверное не перенес эти изменения в последнюю сборку - хотя в промежуточных они были. Меняем строку вида:
var ajaxfilemanagerurl = "<?php echo HTTP_SERVER . DIR_WS_CATALOG; ?>admin/includes/javascript/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php?language=' . strtolower(<?php echo DEFAULT_LANGUAGE; ?>) . '&vam=' . trim(<?php echo DIR_WS_ADMIN; ?>, '/') . '&sid=' . session_id() .'";
на:
var ajaxfilemanagerurl = "<?php echo HTTP_SERVER . DIR_WS_CATALOG; ?>admin/includes/javascript/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php?language=<?php echo strtolower(DEFAULT_LANGUAGE); ?>&vam=<?php echo trim(DIR_WS_ADMIN,'/'); ?>&sid=<?php echo session_id(); ?>";
5. Не совсем ошибка но неприятность в /includes/functions/database.php
В данном файле прописаны проыедуры для работы с базой данных. Здесь же есть функция отправки сообщения об ошибке БД администратору. Все дело в том, что функция отправляет письмо от имени пользователя /dev/null - что мягко говоря некрасиво. Да и нужно ли это?. Проще всего отключить этот функционал.В процедуре tep_db_error комментируем код (или удаляем)
/* mail(DB_ERR_MAIL, 'MySQL Error Report!', $msg,
'From: db_error@'.$_SERVER["SERVER_NAME"]);*/
Кроме того, в новой версии для сохранения ошибок используется системная функция error_log которая по умолчанию пишет не в привычное место, а туда, где определена в настройках PHP. Для тех, кому привычнее видеть этот файл на старом месте,правим код:
Вместо
error_log($log, 3, 'mysql_db_error.log');
пишем:
error_log($log, 3, DIR_FS_CATALOG.'/mysql_db_error.log');
6. Предупреждение в модуле shipping_estimator.php
Если покупатель не вошел в магазин, то не создается объект заказа и появляется предупреждение. Этот объект создается только для зарегистрированного пользователя и это нужно исправить. Комментируются строки 59-60 и код дублируется выше (выделен стилем)
f (tep_session_is_registered('customer_id')) {
} else {
echo tep_output_warning(SHIPPING_OPTIONS_LOGIN) . "<br>";
}
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
7. Каптча /captcha.php
При использовании каптчи в сессии не сохраняется сформированная строка и соответственно механизм нормально не работает. Все дело в том, что в файле отсутствует application_bottom.php - так что смело его туда добавляем: require('includes/application_bottom.php');