Перейти к содержанию
Форум поддержки пользователей VamShop

Замеченное в коде...


Рекомендуемые сообщения

Копаюсь в кода VamShop 1.34, разбираюсь где - что, как работает и т.д. Попотно замечаю всякие "интересные" моменты. Если это никому не интересно, скажите, присылать не буду. ;)

Файл inc/vam_create_password.inc.php, опечатка. Написано:

$pass=vam_RandomString($lenght);
а должно быть:
$pass=vam_RandomString($length);
Файл /inc/vam_db_free_result.inc.php. Функция не обрабатывает случай освобождения кешированного запроса. Полный вариант:
function vam_db_free_result(&$db_query) {
  if (is_array($db_query)) {
    unset($db_query);
    return true;
  } else {
    return mysql_free_result($db_query);
  }
}[/code] Файл includes/classes/class.inputfilter.php. Тут сложнее. Я, пока в деталях не разобрался, как там работает, но похоже с этим кодом проблема:
[code] foreach ($source as $key => $value)
// filter element for XSS and other 'bad' code etc.
$tmp_key = $key;
unset ($source[$key]);
$key = $this->remove($this->decode($key));
if ($key != $tmp_key) {
return $source;
} else {
if (is_string($value))
$source[$key] = $this->remove($this->decode($value));
}
return $source;
Судя по логике работы, пропущены блоки цикла, в результате выполняется (для всего массива) только "$tmp_key = $key;" Вероятно, правильный вариант должен выглядеть как:
			foreach ($source as $key => $value) {
// filter element for XSS and other 'bad' code etc.
$tmp_key = $key;
unset ($source[$key]);
$key = $this->remove($this->decode($key));
if ($key != $tmp_key) {
return $source;
} else {
if (is_string($value))
$source[$key] = $this->remove($this->decode($value));
}
}
return $source;[/code]

Файл lang/russian/russian.php, значение константы NAVBAR_TITLE_LOGIN зависит от "$navigation->snapshot['page']". Проблема в том, что единственная переменная "$navigation" ещё не объявлена, а где объявляется - не объект. Вариант, что это или экземпляр объекта navigationHistory, который нигде не создаётся или $_SESSION['navigation']->snapshot['page'], который в этот момент ещё тоже не существует.

Ошибка или реликт прошлого? ;)

Ссылка на сообщение
Поделиться на другие сайты

Atrus

Спасибо большое!

Интересно конечно, даже очень.

Внёс исправления в svn, спасибо.

А вот насчёт russian.php я даже и не в курсе.

Наверное нужно просто оставить одну NAVBAR_TITLE_LOGIN без условия, раз оно не работает!

Ссылка на сообщение
Поделиться на другие сайты

Тогда продолжим... ;-)

lang/russian/russian.php

Константы JS_ERROR_NO_PAYMENT_MODULE_SELECTED и TEXT_CLOSE_WINDOW описаны дважды.

В описании констант WARNING_INSTALL_DIRECTORY_EXISTS и WARNING_CONFIG_FILE_WRITEABLE используется устаревший массив $HTTP_SERVER_VARS

NAVBAR_TITLE_LOGIN похоже и правда реликт. Вероятно стоит оставить лишь значение

define('NAVBAR_TITLE_LOGIN', 'Вход');
admin/includes/functions/export_functions.php Функция vam_get_products_price_export. Не описана переменная $show_currencies. судя по всему - недобавлена в список параметров функции. Проверить невозможно, функция ни откуда не вызывается. admin/includes/functions/file_system.php Метод isExtensionSupported, опечатка, написано:
$file_extension = substr($fileName, strrpos($file, '.'));
должно быть:
$file_extension = substr($fileName, strrpos($fileName, '.'));
inc/vam_set_customer_status_upgrade.inc.php Переменная $customer_notified не объявлена глобальной. includes/classes/class.inputfilter.php вместо:
if (function_exists(html_entity_decode)) {
должно быть:
if (function_exists('html_entity_decode')) {
includes/modules/shipping/dhl.php Метод quote, опечатка, написано:
$n == 0;
должно быть:
$n = 0;
includes/modules/address_book_details.php написано:
  include_once('inc/vam_get_zone_name.inc.php');
  include_once('inc/vam_get_country_list.inc.php');[/code] правильнее:
[code]  include_once(DIR_FS_INC.'vam_get_zone_name.inc.php');
  include_once(DIR_FS_INC.'vam_get_country_list.inc.php');
includes/modules/checkout_new_address.php написано:
  include_once('inc/vam_get_zone_name.inc.php');
  include_once('inc/vam_get_country_list.inc.php');[/code] правильнее:
[code]  include_once(DIR_FS_INC.'vam_get_zone_name.inc.php');
  include_once(DIR_FS_INC.'vam_get_country_list.inc.php');

includes/header.php

тоже самое, много include и require с путями без констант.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо, все исправления добавил.

Только по поводу:

admin/includes/functions/export_functions.php

Функция vam_get_products_price_export. Не описана переменная $show_currencies. судя по всему - недобавлена в список параметров функции. Проверить невозможно, функция ни откуда не вызывается.

Я не стал ничего делать, раз функция не используется.

Пусть пока файл поживёт, думаю как-нибудь заняться чисткой, удалить неиспользуемые файлы.

inc/vam_set_customer_status_upgrade.inc.php

Переменная $customer_notified не объявлена глобальной.

А как правильно, просто после:


function vam_set_customer_status_upgrade($customer_id){

[/code] добавить:
[code]
global $customer_notified;

?!

Ссылка на сообщение
Поделиться на другие сайты

  Atrus! Ты взялся за труд Геракла. Авди'евы конюшни огромны....

  Берущийся за такое вызывает уважение.

  Удачи тебе, Atrus!

Ссылка на сообщение
Поделиться на другие сайты

Браво, Atrus! Так держать!

А куда мне деваться? ;-) В этом "ловушка" GPL. Если я не хочу большой гемморой, при накатывании каждого обновления, то я должен поделиться всеми общеполезными вещами. 8)

В магазине используются функции такие как:

system, exec, chown, chgrp, escapeshellcmd, escapeshellarg

которые на некоторых хостингах отключаются, цитрую техподдержку одного из хостингов - "потому что их используют нехорошие люди"

От части этих функция не избавиться, т.к. ими пользуются системы резервоного копирования. Впрочем, маленький магазин сможет обойтись и без них, одним phpMyAdmin...

Просто предполагается, что раз кто-то ставить магазин, то и хостинг должен быть соответствующий. Не 5 у.е. в год или holm.ru. :)

Ссылка на сообщение
Поделиться на другие сайты

По-моему, практически ничего из:

system, exec, chown, chgrp, escapeshellcmd, escapeshellarg

Не используется в магазине, может быть exec и то в резервном копировании только, как сказал Atrus.

Так что, мне кажется, не так всё страшно.

P.S. Я тут всё пробую magentocommmerce.com запустить, вот где проблема.

Так и не могу его установить, не могу никак все необходимые для него системные требования выполнить.

Ссылка на сообщение
Поделиться на другие сайты

Саша!

А ты в application_top.php замени

error_reporting(E_ALL & ~E_NOTICE);

на

  @ini_set('display_errors', '1');

  error_reporting(E_ALL);

Узнаешь много интересного ;)

Ссылка на сообщение
Поделиться на другие сайты

Многие ошибки там - это или двойное определение констант или ображение к несуществущей переменной или элементу массива.

Ссылка на сообщение
Поделиться на другие сайты

Ага. Иногда это просто не инициализированная переменная, а иногда это

Файл inc/vam_create_password.inc.php, опечатка. Написано:

$pass=vam_RandomString($lenght);
а должно быть:
$pass=vam_RandomString($length);

Но лучше когда таких сообщений вообще нет, когда код вычищен и вылизан :)

Ссылка на сообщение
Поделиться на другие сайты

inc/vam_update_whos_online.inc.php

Написано:

$wo_full_name = 'Guest';
а можно:
$wo_full_name = TEXT_GUEST;

Эта функция вызывается только из includes/application_top.php, а там эта константа доступна.

Ссылка на сообщение
Поделиться на другие сайты

Atrus

Твои изменения в /includes/classes/class.inputfilter.php убрал, из-за них в корзине не пересчитывалось количество товара, т.е. если зайти в корзину, указать количество и нажать кнопку обновить, всё оставалось как есть, без изменений.

Ссылка на сообщение
Поделиться на другие сайты

Твои изменения в /includes/classes/class.inputfilter.php убрал, из-за них в корзине не пересчитывалось количество товара, т.е. если зайти в корзину, указать количество и нажать кнопку обновить, всё оставалось как есть, без изменений.

Понял, буду посмотреть...

Ссылка на сообщение
Поделиться на другие сайты
  • 6 months later...

В файле admin\module_newsletter.php (Админка - Разное - Инструменты - Письмо с новостями) в SQL запросе CREATE TABLE... не указана кодировка, поэтому таблица module_newsletter_temp_N (N - номер рассылки) создаются в кодировке, указанной на сервере, а не в UTF8.

Для устранения в SQL запрос добавил

ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci

P.S.

Аналогично:

файл admin\customers_status.php используется при создании группы клиентов (Админка - Покупатели - Группы клиентов), создается таблица personal_offers_by_customers_status_N (N - номер группы),

хотя в этой таблице и нет текстовых полей, - все же у себя я исправил

Ссылка на сообщение
Поделиться на другие сайты

author

Спасибо большое, внёс исправления в код, в следующем патче будут исправленные файлы.

Вот прицепил на всякий случай сейчас два этих исправленных файла.

customers_status.php

module_newsletter.php

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...