Версия WordPress 3.4, но вроде бы как работает для всей линейки 3.x.x.

Столкнулся с проблемой: установил на хостинг WordPress 3.4, в процессе установки скрипт сообщил мне, что ему не удалось создать файл wp-config.php, и что мне необхоимо создать его вручную, а код вывел на страницу в специальном «контейнере».

Я скопировал код в текстовый редактор, сохранил в кодировке UTF-8, /загрузил на сервер хостинга/, обновил страницу — «Невозможно отобразить страницу, страница не найдена», ошибка 404.

Проблема оказалась с режимом работы с UTF-8 файлом, в редакторе есть такой режим как BOM, решение проблемы состоит в том, что н еобходимо отключить режим сохранения с BOM, умеет это делать например редактор Notepad++ v.2 под Windows.

Вторая проблема, с которой я столкнулся после установки WordPress, состояла в том, что у меня изчез редактор (остался только HTML-редактор при включенной вкладке Визуального редактора), и не работало перетягивание виджетов.

Сначала я грешил на некорректную работу gzip — это описывали многие, как одна из основных причин, но другой скрипт, использующий gzip, при этом работал корректно, так что проблема состояла не в этом.

Второй возможной причиной неработающего визуального редактора, на форумах была нехватка памяти скрипту, и в php.ini настройках сервера установил значение memory_limit=128M, а до этого стояло 32 (чего, кстати, вполне достаточно WordPress’у), перезагрузил службу веб-сервера, но проблема не исчезла.

Наконец нашёл причину неработающего визуального редактора TinyMCE и неперетягивающихся виджетов в том, что при генерации кода файла wp-config.php при установке (то, о чём я писал в первой проблеме), стал несовсем корректный код, а точнее в нём нехватало строчки:

define(‘CONCATENATE_SCRIPTS’, false );

которую я добавил в середину файла, и всё заработало: и появился визуальный редактор, и стали перетягиваться виджеты.

С первого раза может и не сработать, после добавления этой строки в файл wp-config.php необходимо очистить кэш (правда, я этого не делал, и так заработало).

Session ID в строке адреса браузера мешает, когда необходимо дать ссылку на определённую тему форума, приходится вручную обрезать URL, удаляя из него запись вида &sid=xxxx, но неопытные пользователи могут этого не сделать, в результате чего опубликовать на другом ресурсе свой SID, что может быть чревато угоном аккаунта.

Для того чтобы cookies корректно работали, необходимо чтобы некоторые директивы файла php.ini были настроены следующим образом:

session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0

После чего необходимо внести следующие изменения в php-файл inсludes/funсtions.php скрипта phpBB:

После кода

// Assign sid if session id is not specified
if ($session_id === false)
{
$session_id = $_SID;
}

необходиомо добавить:

global $user;
if ($user->data[‘user_id’] == ANONYMOUS)
{
$session_id = false;
}

После чего &sid=xxx исчезает из строки адреса браузера, что позволяет дать нормальную ссылку на определённую тему.

Ajax — это технология, которая позволяет без обновления всей страницы, изменить содержимое части страницы при помощи php и javascript, это в значительной степени уменьшает объём траффика между сервером и клиентом, а также снижают нагрузку на сервер и позволяют быстрее отобразить на странице изменённое содержимое.

Для того, чтобы использовать jQuery, нам понадобится js-библиотека jquery.1.7.1.min.js. Также необходимо создать js-файл с функцией, которую мы будем вызывать из php-файла, чтобы сделать запрос на сервер при помощи javascript. Эта функция выглядит следующим образом:
function zapros(data)
{
$.ajax({
type: "POST",
url: "action.php",
data: "do=zapros&perem="+data,
success: function(html){
$("#id").empty();
$("#id").append(html);
}
});
}

где data — это данные, которые необходимо передать в скрипт action.php;
А сам html-файл, из которого мы вызываем функцию, содержит следующий код:

<html>

<head>

<title></title>

<script src=”jquery.1.7.1.min.js”></script>

<script src=”jscript.js”></script>

</head>

<body>

<a href=”#” onClick=”zapros(‘dannye_peremennoy’)”>Send</a>

<div id=”id”>

Thing

</div>

</body>

</html>

В свою очередь, файл action.php, в который поступает наш запрос, содержит следующее содержимое:

<?php

echo $_POST[‘perem’];

?>

Что и выведет содержимое переменной perem на страницу.

Есть два важных момента, о которых не следует забывать, используя jQuery:
1. Вместо файла action.php, может быть тот же самый index.php;
2. Если ссылаться на другой хост, то это не сработает (в отличии от json).

Очень удобно создавать php-код отдельно от html-кода, при этом легко изменить дизайн сайта, далее я опишу как это сделать. Также с помощью tpl-шаблонов можно реализовать многоязычность на сайте.

Для того, чтобы создать страницу на основе шаблонов нам необходима библиотека-парсер, которая будет переваривать особые теги в коде html и отображать на странице значения вместо этих тегов.

Код парсера файлов шаблонов:

class TemplateParser
{
var $vars = array();
var $template;
function
get_tpl($tpl_name)
{
if(empty($tpl_name) || !file_exists($tpl_name))
{
return false;
}
else
{

$this->template = file_get_contents($tpl_name);
}
}
function
set_tpl($key,$var)
{
$this->vars[$key] = $var;
}
function tpl_parse()
{
foreach($this->vars as $find => $replace)
{
$this->template = str_replace($find, $replace, $this->template);
}
}
}

 

Теги имеют вид {ПЕРЕМЕННАЯ}, например если сделать в тегах , то не меняя шаблон страницы, можно изменить значение содержимого.

PHP-код в таком случае выглядит следующим образом:
get_tpl('main.tpl');

$parse->set_tpl(‘{title}’,’Test page’); //подставляем значение в переменную

$parse->tpl_parse();
echo $parse->template;
?>

 

Чаще всего, рекламу вроде шаблоны wordpress скачать оставляют в открытом виде в исходных кодах шаблона в файлах .php или .html, и достаточно их просто стереть и сохранить файл, как надпись исчезает. Но сегодня наткнулся на более хитрый, на первый взгляд, способ, зашифрованный в php функцию base64, причём зашифрован был с одним тэгом html, и при удалении этой функции плыл дизайн, именно из-за того, что был сохранён всего лишь один закрывающий html-тэг.

Код выглядит примерно так: PGEgaHJlZj0iaHR0cDovL3d3dy53cHRoZW1lLnVzLyI+0YjQsNCx0LvQvtC90Ysgd29yZHByZXNzINGB0LrQsNGH0LDRgtGMPC9hPgo8L2Rpdj4=
и расшифровать его можно как теми же средствами PHP, которыми он и был зашифрован, так и воспользоваться онлайн-шифровщиками/расшифровщиками вроде base64.ru.

Функция эта выглядела так:
string base64_encode ( string $data )
вместо $data и был тот самый шифр выше, заметьте, он может быть объявлен и где-то выше, или же вовсе отдельно в другом файле, и быть подключен с помощью include(), правда тогда вы найдёте некий подобный шифр там, но там не будет написано base64. есть и другие способы шифровки, на заметку.

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

Каждый раз, как берусь писать прикладное сетевое приложение на Delphi (да, да, я им не брезгую, т.к. это отличная среда для прикладных задач и быстрой разработки), то приходится открывать книжку, на одной и той же замызганной странице, и набираю текст вручную, поэтому добавлю его сюда, и опишу как работать с UDP потоком, как со строкой.

Для начала ставим на форму компонент из вкладки Indy Servers называемый IdUDPServer, и по событию OnUDPRead в создавшейся процедуре делаем таким образом:

procedure TMainForm.srvUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
StringFormatedStream: TStringStream; //объявляем поток строкового типа
begin
StringFormatedStream := TstringStream.Create(''); //инициируем его
StringFormatedStream.CopyFrom(AData, AData.Size); //берём данные, поступившие нам на сервер, который слушает сеть
Memo1.Lines.Add(ABinding.PeerIP+':'+inttostr(ABinding.PeerPort)+'
'+StringFormatedStream.DataString); //полученные данные можно вывести,
например в Memo
//srv.Send(ABinding.PeerIP,ABinding.PeerPort,StringFormatedStream.DataString);
//посылаем поток дальше (это вовсе не обязательно делать, если у нас
сервер один)
StringFormatedStream.Free; //освобождаем поток
end;

И да, конечно же предварительно нужно настроить сам компонент, такие значения как DefaultPort по крайней мере, на который и будут приходить данные.

В свою очередь из другого приложения можно отправить поток простым способом через IdUDPServer или IdUDPClient — только второй не умеет принимать данные (или я об этом не знаю), таким способом
IdUDPServer.Send(IP:String, Port:Integer, 'Строка');

Протокол UDP, в отличие от его доделанного брата TCP, не поддерживает сессию, он только лишь отправляет поток данных в сеть по назначенном адресу (или широковещательному, например для сети с параметрами 192.168.1.1 максой 255.255.255.0 широковещательная отправка будет выглядеть как на адрес 192.168.1.255), и не заботится об их доставке (это можно реализовать самому, если нужно).

Теперь можно писать чат или всё, что угодно.

Это всё, такое простое, и всё равно забывается.