Есть папка с файлами в разной кодировке. Нужно сменить кодировку лишь для файлов cp1251 на utf-8. mb_detect_encoding показывает UTF-8, но, открыв файл в notepad++, я вижу, что указана кодировка windows-1251. iconv('cp1251', 'utf-8', $contents) ругается, если файл не в cp1251. Мой код пока такой:
выдает ошибку, подскажите, пожалуйста, в чем проблема? (Добавление)
Может можно просто через терминал почистить? Всего более 3к файлов заражено на сервере, вручную не реально чистить.
Есть самописный скрипт. Кидается в корень. Правда чистит только такие вредоносные скрипты, то есть .htaccess и прочее не трогает. Только бэкап сделайте, если решитесь использовать. Он не доработан, но большую часть находит. И, да, полезно поискать файлы одинакового размера и еще asset, кажется они используют, можно в первом скрипте заменить eval на него и проверить. В скриптах все большие php на маленькие надо заменить, а то это здесь автоматом заменяется...
Возможно, но немного контекста бы не помешало: я так понимаю, нужно проверить $query (дал ли запрос результаты). Иначе mysql_fetch_array выдаст ошибку. Что можно сделать, кроме того, что я предложил? try - catch?
Вот такая проблема с авторизацией на моём сайте:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\phptest.rexx\www\authorization.php on line 8
Код сайта:
<?php
$connetc = mysql_connect('localhost', 'root') or die(mysql_error());
mysql_select_db('siterexx');
if(isset($_POST['enter'])){
$e_login = $_POST['e_login'];
$e_password = md5($_POST['e_password']);
$query = mysql_query("SELECT * FROM users WHERE login='$e_login");
$user_data = mysql_fetch_array($query);
if($user_data['password']==$e_password){
echo "Вы вошли в систему!";
}
else{
echo "Пароль неверен!";
}
}
?>
Заранее спасибо!
Можно собачку поставить (@mysql_fetch_array($query);) - чтобы ошибка не выводилась, но это как все ошибки отключить. Сейчас работаю не с mysql, и там я могу проверить массив на пустоту (!empty) прежде чем его вытаскивать. Работу с mysql чет подзабыл. В Вашем случае, можно поставить собачку, а затем перед if($user_data['password']==$e_password) поставить условие if($user_data). Только, блин еще один аналогичный else придется для этого условия ставить. Или флаг какой-то вводить, чтобы один else был. В общем, я новичок, мог что-то и напутать, попробуйте...
artlebedev decoder распознал как cp-1252. Но расшифровал не полностью верно. Согласен с Panoptik. Тут только заново вытягивать нормальную базу и заливать. Не сталкивался, чтобы от сервера зависели такие вещи.
насколько я знаю модификаторы вставляются после закрывающего ограничителя. ограничитель должен быть уникальным символом в выражении, либо экранироваться при его пападании в нутрь
в вашем примере ограничители были / и в конце стоял модификатор U
в моем примере был ограничитель # и не использовалось модификаторов (Добавление)
все что мне надо было по регуляркам я почерпнул из этих статей http://phpclub[dot]ru/detail/article/regexp_1 http://phpclub[dot]ru/detail/article/regexp_2
после них проблем с пониманием как и что писать не было
Клёво. Спасибо! А не подскажете, все-же... я прочитал, что модификатор U каким-то образом может относиться к части рег.выражения (к маске кажется). Как и где он при этом записывается? Если Вас не затруднит.
Я про последний \/
var_dump('\/' === '\\/'); => true
Поэтому работает 7 слэшей где их должно быть 8.
А ошибка PCRE шаблона /\\/ и /\/ как раз говорит о том, что для регулярки надо экранировать тоже.
Таким образом, для поиска символа \ регуляркой надо регулярке выдать \\. Ака $regexp = '/'.chr(92).chr(92).'/'
Но чтобы это \\ записать более читаемо, PHP надо объяснить, что это пара символов \\, а не один экранированный \. Для этого каждый из символов предваряется символом экранирования, который в PHP тоже \. Получаем $regexp = '\\\\';
Сам еще новичок, поэтому точного кода не дам. Но для выборки из двух таблиц активно используется LEFT JOIN. Просто у Вас не очень очевидно, где находятся товары. Если в таблице у вас есть, например поле 'cat' для каждого товара с индексом категории, то, проще всего (но не быстрее) для каждой категории выводить ее и COUNT товаров с 'cat'=<её id>. Так же можно задать css - класс для li категорий и после загрузки страницы через js посчитать количество потомков, но это сложно, криво и маразматично. Короче, LEFT JOIN, мой совет гляньте))
Собственно, слэшей должно быть 8.
Найти найти два.
Экранируется PHP-строка. Символ экранирования - "\". Удвоили слэши в итоге.
Затем с точки зрения механизма регулярных выражений PCRE слэш тоже надо экранировать. И символ экранирования там тоже обратный слэш. Ещё раз удвоили - получили 8.
Почему работает с 7 - парсер PHP воспринимает \/ как два символа, а не как / с экранированием.
Да не-е, если речь о первом вхождении \/, то он его воспринимает именно, как экранирование символа /. Иначе, как объяснить, что в результате он находит этот символ? Но Вы правы, символов должно быть восемь. А возможность с 7 символами можно объяснить только тем, что последний \ не требует экранирования, так как за ним идет последний ограничитель. Но тоже не выходит, так как шаблон '/\/' выдает ошибку.
Это регулярное выражение находит совпадение. Не понятно, почему в шаблоне требуется 7 бэк-слэшей в конце (для поиска двух в строке). То есть кто кого экранирует, короче))