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

Для этого нам понадобится Nginx с PHP, подойдёт даже работающий на локальном компьютере или же локально на виртуальной машине, а также любой shared хостинг, который поддерживает PHP (5.6 и новее).

Работает эта схема следующим образом: Nginx выступает в роли самого proxy сервера, который указываем в качестве прокси в браузере, PHP в связке с этим Nginx занимается приёмом запросов от браузера (или скрэппера/кроулера) и отправляет его на shared хостинг, где мы должны разместить файл Proxy.php из репозитория https://github.com/zounar/php-proxy

Этот скрипт можно немного по-вкусу модифицировать, например убрать аутентификаицю на уровне заголовков, передаваемых в скрипт (но можно и оставить для секьюрности), в своём примере я убрал для сокращения описания шагов. Но настройку http basic аутентификацию в nginx опишу.

Здесь не буду объяснять, как устанавливать nginx, а также PHP-FPM.

Настраиваем виртуальный хост nginx следующим образом:

server {
listen 3128;
server_name _;
root /home/user/webproxy;
index index.php;

auth_basic "Restricted";
auth_basic_user_file /home/user/web/.htpasswd; #файл с хешированным паролем для http basic аутентификации

location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}

location / {
rewrite ^/(.*)$ /index.php?url=$host$uri; #здесь передаём все запросы нашего браузера/скрэппера/кроулера путём get в переменную url
}
}

Скрипт, который нужно положить в /home/webproxy/index.php:

<?php

$url = $_GET['url'];

$request = curl_init('http://your-shared-hosting.xyz/Proxy.php'); //путь к файлу на shared хостинге

curl_setopt($request, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0',
'Proxy-Auth: SetInTheProxyPHPifEnabled',
'Proxy-Target-URL: https://'.$url
));

curl_exec($request);

?>

 

Менять можно по своему вкусу для сокрытия такого очевидного использования.

От хостинга требуется чтобы в PHP была поддержка libcurl, gzip и PHP safe_mode disabled (практически любой хостинг).

It will be upload files of any type in folder $uploaddir:

<!DOCTYPE HTML>
<HTML>
  <HEAD>
    <meta charset="utf-8">
    <title>upload</title>
  </HEAD>
  <BODY>
    <h1>Upload file service</h1>
    <hr>
<?php
$uploaddir = './files/';


if(isset($_FILES['userfile'])){
    foreach ($_FILES['userfile']['name'] as $key => $value) {
        echo "<b>".$value."</b>";
        $uploadfile = $uploaddir.basename($_FILES['userfile']['name'][$key]);
        if (copy($_FILES['userfile']['tmp_name'][$key], $uploadfile)){
            echo "OK<br>";
        }
        else {
            echo "Error";
            //exit;
        }
        echo "<p><b>Name</b>: ".$_FILES['userfile']['name'][$key]."</p>";
        echo "<p><b>Mime-type</b>: ".$_FILES['userfile']['type'][$key]."</p>";
        echo "<p><b>Size</b>: ".$_FILES['userfile']['size'][$key]."</p>";
        echo "<p><b>TMP Name</b>: ".$_FILES['userfile']['tmp_name'][$key]."</p>";
        echo "<hr>";
    }
}
?>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="userfile[]" multiple="true">
      <input type="submit" value="upload">
    </form>
  </BODY>
</HTML>


Версия 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 необходимо очистить кэш (правда, я этого не делал, и так заработало).

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;
?>