define('IP_LIMIT', '192.168.1.2');
define('INIT_TIMESTAMP', '123123123123123'); |
define('IP_LIMIT', '#IP_LIMIT_PLACEHOLDER#');
define('INIT_TIMESTAMP', '#INIT_TIMESTAMP#'); |
// init.php
use Bitrix\Main\Loader;
use Bitrix\Main;
use Bitrix\Main\EventManager;
use Bitrix\Main\Application;
use Bitrix\Sale\Basket;
use Bitrix\Sale\Order;
use Bitrix\Sale\OrderBase;
use Bitrix\Sale\Helpers;
use Bitrix\Sale\PropertyValueCollection;
$eventManager = EventManager::getInstance();
$request = Application::getInstance()->getContext()->getRequest();
$eventManager->addEventHandler('sale', /*\Bitrix\Sale\Notify::EVENT_ORDER_STATUS_SEND_EMAIL= */ 'OnOrderStatusSendEmail',
static function ($orderId, &$eventName, &$fields, $statusId) use ($request) {
$entity = Bitrix\Sale\Order::load($orderId);
$separator = "<br/>";
$eventName = Bitrix\Sale\Notify::EVENT_DEFAULT_STATUS_CHANGED_ID . $statusId;
$filter = array(
"EVENT_NAME" => $eventName,
'ACTIVE' => 'Y',
);
if ($entity instanceof OrderBase) {
$filter['SITE_ID'] = $entity->getSiteId();
} elseif (defined('SITE_ID') && SITE_ID != '') {
$filter['SITE_ID'] = SITE_ID;
}
$res = \CEventMessage::GetList('', '', $filter);
if ($eventMessage = $res->Fetch()) {
if ($eventMessage['BODY_TYPE'] == 'text') {
$separator = "\n";
}
}
$basketList = '';
/** @var Basket $basket */
$basket = $entity->getBasket();
if ($basket) {
$basketTextList = $basket->getListOfFormatText();
if (!empty($basketTextList)) {
foreach ($basketTextList as $basketItemCode => $basketItemData) {
$basketList .= $basketItemData . $separator;
}
}
}
$getUserEmail = static function (Order $order) {
$userEmail = "";
if (empty($userEmail)) {
/** @var PropertyValueCollection $propertyCollection */
if ($propertyCollection = $order->getPropertyCollection()) {
if ($propUserEmail = $propertyCollection->getUserEmail()) {
$userEmail = $propUserEmail->getValue();
}
}
}
if (empty($userEmail)) {
$userRes = Main\UserTable::getList(array(
'select' => array('ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'EMAIL'),
'filter' => array('=ID' => $order->getUserId()),
));
if ($userData = $userRes->fetch()) {
$userEmail = $userData['EMAIL'];
}
}
return $userEmail;
};
$getUserName = static function (Order $order) {
$userName = "";
if (empty($userName)) {
/** @var PropertyValueCollection $propertyCollection */
if ($propertyCollection = $order->getPropertyCollection()) {
if ($propPayerName = $propertyCollection->getPayerName()) {
$userName = $propPayerName->getValue();
}
}
}
if (empty($userName)) {
$userRes = Main\UserTable::getList(array(
'select' => array('ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'EMAIL'),
'filter' => array('=ID' => $order->getUserId()),
));
if ($userData = $userRes->fetch()) {
$userData['PAYER_NAME'] = \CUser::FormatName(
\CSite::GetNameFormat(null, $order->getSiteId()), $userData, true
);
$userName = $userData['PAYER_NAME'];
}
}
return $userName;
};
$fields = array_merge($fields, array(
"ORDER_ID" => $entity->getField("ACCOUNT_NUMBER"),
"ORDER_REAL_ID" => $entity->getField("ID"),
"ORDER_ACCOUNT_NUMBER_ENCODE" => urlencode(urlencode($entity->getField("ACCOUNT_NUMBER"))),
"ORDER_DATE" => $entity->getDateInsert()->toString(),
"ORDER_USER" => $getUserName($entity),
"PRICE" => SaleFormatCurrency($entity->getPrice(), $entity->getCurrency()),
"BCC" => Main\Config\Option::get("sale", "order_email",
"order@" . $request->getServer()->getServerName()),
"EMAIL" => $getUserEmail($entity),
"ORDER_LIST" => $basketList,
"SALE_EMAIL" => Main\Config\Option::get("sale", "order_email",
"order@" . $request->getServer()->getServerName()),
"DELIVERY_PRICE" => $entity->getDeliveryPrice(),
"ORDER_PUBLIC_URL" => Helpers\Order::isAllowGuestView($entity) ? Helpers\Order::getPublicLink($entity) : ""
));
return true;
}
);
|
echo $SSH_CLIENT | awk '{ print $1}' |
touch /etc/php.d/z_bx_custom.ini |
zend_extension = xdebug.so xdebug.start_with_request = yes xdebug.discover_client_host = true xdebug.client_host = 192.168.0.102 xdebug.client_port = 9003 xdebug.idekey = vsc xdebug.mode = debug,trace,profile xdebug.collect_params = 3 xdebug.trace_output_name = trace.%R.%u xdebug.profile_output_name = cachegrind.out.%R.%u xdebug.output_dir = /tmp xdebug.log = /tmp/xdebug.log |
service httpd restart |
php -r 'xdebug_info();' | less -R |
{
"version": "0.2.0",
"configurations": [
{
"name": "remote XDebug",
"type": "php",
"request": "launch",
"hostname": "192.168.0.102",
"port": 9003,
"pathMappings": {
"/": "${workspaceRoot}"
}
},
]
} |
<?
$var=1;
$var++;
echo $var;
$str = "Xdebug";
function ret_ord( $c )
{
return ord( $c );
}
foreach ( str_split( $str ) as $char )
{
echo $char, ": ", ret_ord( $char ), "\n";
}
?> |
tail -f /tmp/xdebug.log |
[14044] [Step Debug] <- breakpoint_set -i 7 -t line -f file:///home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php -n 3 [14044] [Step Debug] WARN: Breakpoint file name does not exist: /home/bitrix/ext_www/dev1-site.ru/home/bitrix/ext_www/dev1-site.ru/test/index.php (No such file or directory). [14044] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" id="140440038" resolved="unresolved"></response> |
CAgent::RemoveAgent("CCatalog::PreGenerateXML(\"yandex\");", "catalog");
if ($bNeedAgent)
{
CAgent::AddAgent("CCatalog::PreGenerateXML(\"yandex\");", "catalog", "N", 24*60*60, "", "Y");
}
|
use Sprint\Migration\Version;
\CModule::IncludeModule("sprint.migration");
$helper = (new Version())->getHelperManager();
$helper->Agent()->saveAgent(array(
'MODULE_ID' => 'my_module',
'USER_ID' => NULL,
'SORT' => '0',
'NAME' => 'myAgent();',
'ACTIVE' => 'Y',
'NEXT_EXEC' => date('d.m.Y H:i:s'),
'AGENT_INTERVAL' => 60*60,
'IS_PERIOD' => 'N',
'RETRY_COUNT' => '0',
));
|
| Отдельно отмечу, что вручную не нужно ничего настраивать. Настройка сети в самом веб-окружении производится через меню веб-окружения 2. Manage localhost - 3. Configure network interface manually. или 2. Manage localhost - 2. Configure network interface via DHCP. |
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 |
# enp0s3 HWADDR=08:00:27:ca:37:1c DEVICE=enp0s3 BOOTPROTO=none ONB OOT=yes TYPE=Ethernet IPADDR=192.168.0.120 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 GATEWAY=192.168.0.1 DNS1=8.8.8.8 DNS2=82.146.59.250 |
vi /etc/resolv.conf |
nameserver 8.8.8.8 nameserver 82.146.59.250 |
service network restart |
ping ya.ru |
reboot |
ping ya.ru |
| Сайт работал в кодировке UTF-8. Конфигурация сервера не соответствует требованиям. Для продолжения установите настройки PHP: mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8. |
<IfModule mod_php7.c> php_value default_charset UTF-8 php_value mbstring.internal_encoding UTF-8 php_value mbstring.func_overload 2 AddDefaultCharset UTF-8 </IfModule> |
/etc/php.d/bitrixenv.ini |
; Utf-8 support default_charset = UTF-8 |
; Utf-8 support default_charset = UTF-8 mbstring.internal_encoding = UTF-8 mbstring.func_overload = 2 |
apachectl restart |
wget https://repo.bitrix.info/yum/bitrix-env.sh |
|
| [TypeError] array_keys(): El argumento #1 ($array) debe ser de tipo matriz, cadena dada (0) /home/bitrix/www/bitrix/modules/crm/classes/general/crm_field_multi.php:859 #0: array_keys /home/bitrix/www/bitrix/modules/crm/classes/general/crm_field_multi.php:859 #1: CCrmFieldMulti::PrepareSearchQuery /home/bitrix/www/bitrix/modules/crm/classes/general/crm_field_multi.php :955 #2: CCrmFieldMulti::PrepareSearchQuery /home/bitrix/www/bitrix/modules/crm/classes/general/crm_field_multi.php:714 #3: CCrmFieldMulti::GetList /home/bitrix/www/bitrix/modules/crm /classes/general/crm_lead.php:1000 #4: CAllCrmLead::GetList /home/bitrix/www/stream/integraciones/integracionurbania.php:110 ---------- |
if ($http_user_agent ~* (YandexBot)) {
return 403;
} |
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
$options = array(
'YandexBot', 'YandexAccessibilityBot', 'YandexMobileBot','YandexDirectDyn',
'YandexScreenshotBot', 'YandexImages', 'YandexVideo', 'YandexVideoParser',
'YandexMedia', 'YandexBlogs', 'YandexFavicons', 'YandexWebmaster',
'YandexPagechecker', 'YandexImageResizer','YandexAdNet', 'YandexDirect',
'YaDirectFetcher', 'YandexCalendar', 'YandexSitelinks', 'YandexMetrika',
'YandexNews', 'YandexNewslinks', 'YandexCatalog', 'YandexAntivirus',
'YandexMarket', 'YandexVertis', 'YandexForDomain', 'YandexSpravBot',
'YandexSearchShop', 'YandexMedianaBot', 'YandexOntoDB', 'YandexOntoDBAPI',
'Googlebot', 'Googlebot-Image', 'Mediapartners-Google', 'AdsBot-Google',
'Mail.RU_Bot', 'bingbot', 'Accoona', 'ia_archiver', 'Ask Jeeves',
'OmniExplorer_Bot', 'W3C_Validator', 'WebAlta', 'YahooFeedSeeker', 'Yahoo!',
'Ezooms', '', 'Tourlentabot', 'MJ12bot', 'AhrefsBot', 'SearchBot', 'SiteStatus',
'Nigma.ru', 'Baiduspider', 'Statsbot', 'SISTRIX', 'AcoonBot', 'findlinks',
'proximic', 'OpenindexSpider','statdom.ru', 'Exabot', 'Spider', 'SeznamBot',
'oBot', 'C-T bot', 'Updownerbot', 'Snoopy', 'heritrix', 'Yeti',
'DomainVader', 'DCPbot', 'PaperLiBot'
);
foreach($options as $row) {
if (stripos($_SERVER['HTTP_USER_AGENT'], $row) !== false) {
$load = sys_getloadavg();
if ($load[0] > 2) {
header('HTTP/1.1 429 Too many requests');
die('Server too busy. Please try again later.');
}
if ($load[0] > 0.80) {
http_response_code(429);
}
}
}
} |