или Чем шифровать PHP для продажи и лицензирования?
и т.д.
Объясните, зачем он(ioncube)? Когда применяется? Приведите реальный пример.
Sanasol
и т.д.
Объясните, зачем он(ioncube)? Когда применяется? Приведите реальный пример.
Hello,
Quill editor doing really great job with accepting images and putting it as base64.
But actually it doesnt good, especially for big images.
Your DB will be big AF and page load time will grow with each image in text.
I didnt find good or working solution from Quill side. Only some closed GitHub issues.
So i decided to make lilttle hack on backend.
My system info:
Now what we need.
Firstly install
1 |
composer require symfony/dom-crawler |
Then include it and some other classes in your model/controller.
1 2 3 |
use Symfony\Component\DomCrawler\Crawler; use Illuminate\Support\Facades\Storage; use Illuminate\Http\File; |
And here code of extractor/file saver
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$desc = $request->input('some_html'); // POST with html $dom_desc = new Crawler($desc); $images = $dom_desc->filterXPath('//img')->extract(array('src')); // extract images foreach ($images as $key => $value) { if (strpos($value, 'base64') !== false) { // leave alone not base64 images $data = explode(',', $value); // split image mime and body $tmp_file = tempnam('/tmp', 'items'); // create tmp file path file_put_contents($tmp_file, base64_decode($data[1])); // fill temp file with image $path = Storage::putFile('public/items', new File($tmp_file)); // put file to final destination $desc = str_replace($value, $path, $desc); // replace src of converted file to fs path unlink($tmp_file); // delete temp file } } |
And finally we got $desc html with converted base64 -> fs path
Saving to DB.
That’s all.
Full Code at gist:
Problem:
I have many different URLs in database.
From many sites.
I dont know how these sites work and url structure.
So I need to get 500 URLs from each site then compare and group it by common static part.
Which should be automatically merged via replacing with {var} any dynamic URL parts.
And then get ~10 urls as result.
Final result: reduce database size
Solution:
Here is some kind Proof of Concept 🙂
Example with splitting URL by «?»
— Parse parameters.
— Calculate frequency for unique parameter values.
— Get Nth percentile.
— Build URLs and replace parameters which frequency is more than Nth percentile
For small data like here in
For «big real data» 90-95 percentile.
For example: I use 90 percentile for 5000 links ->
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<?php $stats = []; $pages = [ (object)['page' => 'http://example.com/?page=123'], (object)['page' => 'http://example.com/?page=123'], (object)['page' => 'http://example.com/?page=123'], (object)['page' => 'http://example.com/?page=321'], (object)['page' => 'http://example.com/?page=321'], (object)['page' => 'http://example.com/?page=321'], (object)['page' => 'http://example.com/?page=qwas'], (object)['page' => 'http://example.com/?page=safa15'], ]; // array of objects with page property = URL $params_counter = []; foreach ($pages as $page) { $components = explode('?', $page->page); if (!empty($components[1])) { parse_str($components[1], $params); foreach ($params as $key => $val) { if (!isset($params_counter[$key][$val])) { $params_counter[$key][$val] = 0; } $params_counter[$key][$val]++; } } } function procentile($percentile, $array) { sort($array); $index = ($percentile/100) * count($array); if (floor($index) == $index) { $result = ($array[$index-1] + $array[$index])/2; } else { $result = $array[floor($index)]; } return $result; } $some_data = []; foreach ($params_counter as $key => $val) { $some_data[$key] = count($val); } $procentile = procentile(90, $some_data); foreach ($pages as $page) { $components = explode('?', $page->page); if (!empty($components[1])) { parse_str($components[1], $params); arsort($params); foreach ($params as $key => $val) { if ($some_data[$key] > $procentile) { $params[$key] = '$var'; } } arsort($params); $pattern = http_build_query($params); $new_url = urldecode('?'.$pattern); if (!isset($stats[$new_url])) { $stats[$new_url] = 0; } $stats[$new_url]++; } } arsort($stats); var_dump($stats); |
Стриминг видео с сервера очень сильно кушает канал. Поэтому появляется мысль кешировать видео через CloudFlare.
При этом надо сохранить возможность перемотки и разбить файлы на небольшие куски, чтобы CF ничего не заподозрил, а так же не попасть под лимит который не кешируется.
Будем использовать Uppod плеер.
1. Разбить видео
2. Создать страницу сайта
UP 19.07 Трафик продолжает снижаться
(далее…)
Заменяем старый IP на всех доменах добавленных в CloudFlare.
Ставим из композера:
1 |
composer require jamesryanbell/cloudflare |
Создаем php файл
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php include('vendor/autoload.php'); $old_ip = "127.0.0.1"; $new_ip = "127.0.0.2"; $zone = new Cloudflare\Zone($client); $dns = new Cloudflare\Zone\Dns($client); $zones = $zone->zones(); foreach($zones->result as $zone){ $dns_records = $dns->list_records($zone->id); foreach($dns_records->result as $record){ if(strpos($record->content, $old_ip) !== false){ echo $record->id.'-'.$zone->name.PHP_EOL; $dns->update($zone->id, $record->id, $record->type, $record->name, str_replace($old_ip,$new_ip,$record->content)); } } } |
Заполняем переменные: старый/текущий IP, новый IP, email аккаунта на CF, API ключ CF
Запускаем
…
Профит!
Class db does not exist eloquent
A facade root has not been set
and other terrible errors.
This post for those who like me using Eloquent outside Laravel.
With config like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
use Devio\Eavquent\Agnostic\BootEavquent; use Illuminate\Database\Capsule\Manager as Capsule; use Illuminate\Events\Dispatcher; use Illuminate\Container\Container; use Illuminate\Support\Facades\Schema; $capsule = new Capsule; $capsule->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname', 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]); // Set the event dispatcher used by Eloquent models... (optional) $capsule->setEventDispatcher(new Dispatcher(new Container)); // Make this Capsule instance available globally via static methods... (optional) $capsule->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) $capsule->bootEloquent(); |
Sometime need to log queries or just count it.
Almost all google results show code like this:
1 |
DB::listen(function($query){}); |
But outside Laravel you will get errors written above.
I spent some time to get it work.
And now i got solution 😀
To get work query logs outside Laravel use this 🙂
1 2 3 4 5 6 7 8 9 10 |
// Listening to all queries $capsule->connection()->listen(function ($query) { var_dump($query); }); // Enabling query log $capsule->connection()->enableQueryLog(); // Getting array of executed queries $capsule->connection()->getQueryLog(); |
Hello, %username%.
First english post here. Just for lulz 😀
Actually post related to gift i’ve got from
Here some stickers and postcard with handwritten message.
So I decided to write little post about deploy on my pet project —
I also have work project on deploybot, but it works almost same. Only difference is servers amount, but I found some great servers for e-commerce at
I use DeployBot about 9 months totally and last 3 months with the paid account.
So my deploy script is not canonical and not safe, but it works 🙂
After commit on master — github send info to DeployBot.
Then it just pulling data from github and then run/install/update composer and depencies.
And here full script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
echo 'Changing dir'; cd /var/www/ echo 'Pulling git'; git pull origin master if [ ! -f /usr/local/bin/composer ]; then echo 'Installing composer'; php -r "readfile('https://getcomposer.org/installer');" | php mv composer.phar /usr/local/bin/composer echo 'Install depencies'; composer install else echo 'Update depencies'; composer update fi |
Thats all!
At current moment a have about 2500 deploys passed.
При обновлении со старой версии php в DLE могут пропасть русские символы в заголовках и контенте админки.
Это происходит в случае использования кодировки windows-1251/cp1251
Для исправления необходимо явно указывать кодировку windows-1251 в вызове функции htmlspecialchars().
Список файлов для исправления
Добавляем во всех функции кодировку из конфига.
Например:
1 |
$title = htmlspecialchars(stripslashes( $title ), ENT_QUOTES); |
1 |
$title = htmlspecialchars(stripslashes( $title ), ENT_QUOTES, $config['charset']); |
Жил был один новостной сайт на вордпрессе.
Стал плохо жить и переехал
Но вот незадача он кушал ресурсы сервера так как-будто это был дешевый шаред хостинг, и сервер не выдерживал нагрузки в пиковые моменты.
А на сайт тот заходили по 10-20 тысяч человек в день и это было очень печально, ведь там стояли еще несколько почти таких же сайтов. Стали мы искать кто же так кушает наш сервер и почему все так плохо.
И нашли мы волшебную строчку в functions.php темы.
Какой-то добрый программист оставил там всего лишь одну строчку которая перед каждой новостью с помощью preg_replace добавляла блок адсенса в нужное место.
Всего лишь один preg_replace для всего контента перед выводом ставил дедик на колени и заставлял его молиться чтобы пронать gateway.
Надеюсь эта маленькая история научит вас любить и уважать функции и не использовать регулярки везде где только можно.
Конец.