| +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
osCommerce VAM Edition 226. Ошибки
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');
