PHP HTML Исходник [Outdated] Сокращатель ссылок | Обновление от 01.03.2020

MrTNTminer

Участник
Автор темы
39
41
Всем привет (кто вообще чекает этот раздел форума 🤔).
Решил я тут сделать сокращатель ссылок, знаете по типу clck.ru (NOT ADVERTISING!). Это у меня более менее получилось (правда без говнокода не обошлось, тока тссс... 🤫).

Что же есть в этом скрипте, что тут уникального?! - скорее всего вы задались таким вопросом.
Ответ: ничего...

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

На страницах прикручена Google ReCaptcha V2 для защиты (хоть какой-то) от спам атак.

Сайт я пытался защитить от SQL и XSS инъекций, и это вроде бы у меня получилось (не уверен на 100%), проверка проводилась поверхностно (в любом случае кто-то да найдет дыру в коде).

Для "дизайна" использовался UI Фреймворк Bootstrap 4.3.1.

Пытался сделать так, чтобы на любом устройстве все адекватно отображалось.

Скрипт использует библиотеку RedBeanPHP, так что никаких дампов в исходниках не будет, он все создаст сам.

В БД есть колонка
access, она отвечает за то, есть ли у человека доступ к сокращению ссылок, по умолчанию всегда доступ есть. Также есть колонка admin, но эта колонка ничего не дает, тк я не делал админ панель из-за ее ненадобности, но если этот скрипт заинтересует людей, я ее сделаю (если что идеи можете оставлять в этом посте).

Если вы все еще заинтересованы в этом скрипте, можете посмотреть скрины.

GWk6W.png

GWk6X.png

GWk6Y.png

GWk6Z.png

GWk6a.png

GWk6c.png

GXK8u.png

GWk6f.png

GWk6g.png

И так, когда вы посмотрели скрины, прочитали "краткое" описание и ЕСЛИ (как это возможно) вы захотели скачать данный исходник, перейдем к его настройке.

В скачаном вами архиве есть 2 папки, если вы хотите разместить скрипт в корневой директории (https://domen.ru/), то соответственно открываете папку с незамысловатым названием.
Если вы хотите разместить сайт в подпапке (https://domen.ru/link), то открываете 2 папку, также с незамысловатым названием. Обратите внимание, что файлы в этой папке настроены ТОЛЬКО на подпапку link, если вы хотите другую подпапку, вам прийдется заменить все в скриптах с link на ваше название, легче всего это делается с помощью Notepad++.


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

В новой версии скрипта теперь не нужно настраивать что-то вручную, теперь когда вы загрузите файлы на сайт, вам нужно только перейти по адресу http://domen.ru/install.php. Там все интуитивно понятно.

Если у вас не получается установить скрипт таким методом, то действуйте по этому гайду:


Выполняйте все по списку, у вас все должно заработать, если нет - пишите в эту тему свои проблемы, желательно со скринами.
Переходим в includes/other/db.php и открываем файл.

Заменяем название сайта:
Замена названия сайта:
define('NAMESITE', 'CREELINK');

Заменяем данные подключения к БД:

Настройка подключения к БД:
R::setup( 'mysql:host=HOST;dbname=DBNAME',
        'LOGIN', 'PASSWORD' );

ВНИМАНИЕ!
На некоторых бесплатных хостингах есть ограничения из-за которых скрипт не может изменять/создавать данные в БД.
Вы можете использовать любой хостинг БД в интернете, например remotemysql.com (не реклама).

Но запомните, это не безопасно! Я не несу ответственности если ваши данные удалят/пропадут/украдут и т.п.
Вы делаете все на свой страх и риск!

Заменяем данные Google ReCaptcha v2:
Настройка Google ReCapthca v2:
define('SITEKEY', 'КЛЮЧ_САЙТА');
define('SECRETKEY', 'СЕКРЕТНЫЙ_КЛЮЧ_САЙТА');

В принципе все, настройку сайта вы сделали, теперь сайт работает в штатном режиме.

Если вы хотите использовать данный скрипт - оставьте копирайт.


Критика (обоснованная) насчет недочетов принимается. Если вы пришли ради того, чтобы сказать: "фу це говнокод", без какой либо обоснованной критики - удалитесь с темы, я и так знаю, что это ОЧЕНЬ не идеальный код, я учусь PHP и пытаюсь что-то создавать.
Если вы нашли недоработку/баг или знаете как можно что-то улучшить - отпишите в тему со всеми подробностями, заранее спасибо!

Обновление от 01.03.2020 02:23 (МСК):
* Исправил баг когда некоторые ссылки не сокращались.
* Теперь установить скрипт можно с помощью одного файла.
* Теперь если нету подключения к БД появляется ошибка.

Обновление от 13.02.2020 18:30 (МСК):
* Исправил некоторые моменты (отдельное спасибо @Randewoo).
* Теперь ссылки работают в корневой папке скрипта и без GET запроса (то есть, раньше было https://domen.ru/s/?l=JSf82s47hg, сейчас же https://domen.ru/JSf82s).
* Теперь коды состоят из 6 символов, а не из 10.
* Теперь при переходе по рабочей сокращенной ссылки нету страницы с предупреждением, но, остались страницы с ошибками.
* Исправил баг с Google ReCaptcha.

Обновление от 12.02.2020 19:28 (МСК):
* Исправил баг при первом создании сокращенной ссылки.

Скрытое содержимое доступно для зарегистрированных пользователей!


В последней выложенной версии было много багов и дырок, а также всякого говна, я не хочу больше выкладывать исходник сокращателя ибо он нахуй никому не сдался, а так вы его все равно сможете скачать с форума (он не удаляется навсегда, надо просто найти его уникальный код 🤨).
 
Последнее редактирование:

yxTbl

Фуфел
339
249
До:
blast.hk
После:
creeprod.cf/link/s/l=l0hGugGg5jvdgJ
Это увеличитель ссылок.
 

ImPasha

Software Developer & System Administrator
Друг
1,789
2,136
Роутинг? Не, не слышали.
Асинхронные запросы? Не, не слышали.
Cookie? Не, не слышали.

Ссылки реально не сокращаются, они становятся длиннее.
 

MrTNTminer

Участник
Автор темы
39
41
Роутинг? Не, не слышали.
Асинхронные запросы? Не, не слышали.
Cookie? Не, не слышали.

Ссылки реально не сокращаются, они становятся длиннее.
Чем короче домен - тем лучше, у меня в демо длинный домен, на него незачем делать акцент. Также это демо у меня в подпапке, если сделать в корне ссылка в итоге будет еще меньше + если убрать гет параметр из ссылки, будет еще короче, если у меня будет время я смогу это сделать.
 
Последнее редактирование:
  • Нравится
Реакции: NikitaSokol

Randewoo

Потрачен
110
33
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет. Докапываться не буду, могу лишь дать советы:
1)
Скрипт использует библиотеку RedBeanPHP, так что никаких дампов в исходниках не будет, он все создаст сам.
- во время разработки и тестирования это можно, но когда ты запустишь сервис для публики - это будет создавать дикую нагрузку. Сам представь, при каждом запросе RedBean будет проверять существование БД/Таблицы/Столбца. Для фикса после R::setup() надо прописать R::freeze(true)
2) <?php echo @$data['login']; ?> - никогда не используй игнорирование ошибок/исключений/неверных результатов. У тебя это @, может дать задержку аж до 10 секунд.
3) unset($_SESSION['logged_user']); - unset() лучше не используй, в какой-то из версий php был баг, что он удалял переменную полностью.
Для этого в php есть функция session_destroy()
4) У тебя в slu.php вот такой вот код:
PHP:
$linkbd_create = R::dispense('link');
$linkbd_create->login = 'AUTOMATIC CREATION';
$linkbd_create->linkuser = 'AUTOMATIC CREATION';
$linkbd_create->linkuser_code = 'AUTOMATIC CREATION';
R::store($linkbd_create);
Ты используешь $linkbd_create как объект (->), но можно использовать, как массив:
PHP:
$linkbd_create = R::dispense('link');
$linkbd_create['login'] = 'AUTOMATIC CREATION';
$linkbd_create['linkuser'] = 'AUTOMATIC CREATION';
$linkbd_create['linkuser_code'] = 'AUTOMATIC CREATION';
R::store($linkbd_create);
В php работа с массивами осуществляется быстрее, чем с объектами.
5) В slu.php:7 у тебя следующий код:
PHP:
if($get_user){} else {
Если ты не знаешь, как сделать выражение сразу false, то вот:
PHP:
if(!$get_user) {
! - значит "инверсия". То есть, если у тебя $x равен true, то при использовании ! твой $x будет равен false.
6) <?php require $_SERVER['DOCUMENT_ROOT']."/includes/other/footer.php"; ?> - правильно, что используешь require, а не require_once и правильно, что указываешь полный путь ($_SERVER['DOCUMENT_ROOT']."/includes/other/footer.php"), но есть маленькое но:
В php двойные кавычки означают логическую строку. То есть: если ты напишешь так:
PHP:
$x = 'Dmitry';

echo "hello, my name is $x";
То выдаст - "hello, my name is Dmitry", то есть, php будет парсить строку, искать в ней переменные и т.д., если ты не хочешь этого (а этого и не должно быть в статических строках), то юзани вот так:
PHP:
<?php require ($_SERVER['DOCUMENT_ROOT'] . '/includes/other/footer.php'); ?>
Так будет быстрее.
А так, вроде бы красиво, во всяком случае, лучше, чем у большинства, кто называет себя "топовыми программистами".

Роутинг? Не, не слышали.
Асинхронные запросы? Не, не слышали.
Cookie? Не, не слышали.

Ссылки реально не сокращаются, они становятся длиннее.
господи, как вы заебали выебываться на новичков. тебе же русским языком написано - автор новичок.
ты че, сразу родился таким задротом, который сразу все знал? такой долбоебизм.
 
Последнее редактирование:

MrTNTminer

Участник
Автор темы
39
41
Привет. Докапываться не буду, могу лишь дать советы:
1) - во время разработки и тестирования это можно, но когда ты запустишь сервис для публики - это будет создавать дикую нагрузку. Сам представь, при каждом запросе RedBean будет проверять существование БД/Таблицы/Столбца. Для фикса после R::setup() надо прописать R::freeze(true)
2) <?php echo @$data['login']; ?> - никогда не используй игнорирование ошибок/исключений/неверных результатов. У тебя это @, может дать задержку аж до 10 секунд.
3) unset($_SESSION['logged_user']); - unset() лучше не используй, в какой-то из версий php был баг, что он удалял переменную полностью.
Для этого в php есть функция session_destroy()
4) У тебя в slu.php вот такой вот код:
PHP:
$linkbd_create = R::dispense('link');
$linkbd_create->login = 'AUTOMATIC CREATION';
$linkbd_create->linkuser = 'AUTOMATIC CREATION';
$linkbd_create->linkuser_code = 'AUTOMATIC CREATION';
R::store($linkbd_create);
Ты используешь $linkbd_create как объект (->), но можно использовать, как массив:
PHP:
$linkbd_create = R::dispense('link');
$linkbd_create['login'] = 'AUTOMATIC CREATION';
$linkbd_create['linkuser'] = 'AUTOMATIC CREATION';
$linkbd_create['linkuser_code'] = 'AUTOMATIC CREATION';
R::store($linkbd_create);
В php работа с массивами осуществляется быстрее, чем с объектами.
5) В slu.php:7 у тебя следующий код:
PHP:
if($get_user){} else {
Если ты не знаешь, как сделать выражение сразу false, то вот:
PHP:
if(!$get_user) {
! - значит "инверсия". То есть, если у тебя $x равен true, то при использовании ! твой $x будет равен false.
6) <?php require $_SERVER['DOCUMENT_ROOT']."/includes/other/footer.php"; ?> - правильно, что используешь require, а не require_once и правильно, что указываешь полный путь ($_SERVER['DOCUMENT_ROOT']."/includes/other/footer.php"), но есть маленькое но:
В php двойные кавычки означают логическую строку. То есть: если ты напишешь так:
PHP:
$x = 'Dmitry';

echo "hello, my name is $x";
То выдаст - "hello, my name is Dmitry", то есть, php будет парсить строку, искать в ней переменные и т.д., если ты не хочешь этого (а этого и не должно быть в статических строках), то юзани вот так:
PHP:
<?php require ($_SERVER['DOCUMENT_ROOT'] . '/includes/other/footer.php'); ?>
Так будет быстрее.
А так, вроде бы красиво, во всяком случае, лучше, чем у большинства, кто называет себя "топовыми программистами".


господи, как вы заебали выебываться на новичков. тебе же русским языком написано - автор новичок.
ты че, сразу родился таким задротом, который сразу все знал? такой долбоебизм.
Спасибо за советы, учту.
 
  • Нравится
Реакции: NikitaSokol и Randewoo

NikitaSokol

Активный
206
63
Пишу верный код recaptcha а на сайте пишет неверный как пофиксить?
 

MrTNTminer

Участник
Автор темы
39
41
Пишу верный код recaptcha а на сайте пишет неверный как пофиксить?
Домен рекапчи подключен тот, где у тебя скрипт?
Рекапча в Гугле 2 версии?
Ключи в те поля вводишь, не перепутал местами?
 
  • Нравится
Реакции: NikitaSokol

ImPasha

Software Developer & System Administrator
Друг
1,789
2,136
господи, как вы заебали выебываться на новичков. тебе же русским языком написано - автор новичок.
ты че, сразу родился таким задротом, который сразу все знал? такой долбоебизм.
Зачем делать гайды и выкладывать исходники, если ты новичок?

Во-первых, другие новички начнут использовать этот код и будут учиться по ужасному и абсолютно неправильному коду. Во-вторых, никто не имеет права на то, чтобы ограничивать чью-либо критику: он выложил недоработанный продукт - теперь получает за ошибки, а новичок - просто прикрытие, чтобы сильно не поливали помоями, а стоило бы. В-третьих, продукт даже не выполняет поставленной задачи: ссылки не сокращаются, они удлиняются - здесь даже новичок может понять, что всё идёт через пятую точку и ничего вообще не работает, может быть не стоит это выкладывать? Это не исходник, это тихий ужас, опубликованный не знаю зачем.
 

Randewoo

Потрачен
110
33
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Зачем делать гайды и выкладывать исходники, если ты новичок?

Во-первых, другие новички начнут использовать этот код и будут учиться по ужасному и абсолютно неправильному коду. Во-вторых, никто не имеет права на то, чтобы ограничивать чью-либо критику: он выложил недоработанный продукт - теперь получает за ошибки, а новичок - просто прикрытие, чтобы сильно не поливали помоями, а стоило бы. В-третьих, продукт даже не выполняет поставленной задачи: ссылки не сокращаются, они удлиняются - здесь даже новичок может понять, что всё идёт через пятую точку и ничего вообще не работает, может быть не стоит это выкладывать? Это не исходник, это тихий ужас, опубликованный не знаю зачем.
Человек захотел поделиться своей работой, в каком месте тут гайд.
Он же говорит, что это его первая работа, тут интуитивно понятно, что эту работу не стоит брать в пример для обучения.
 

ImPasha

Software Developer & System Administrator
Друг
1,789
2,136
в каком месте тут гайд.
В большей половине темы рассказывается о том, как устанавливать это чудо техники, что уже можно считать полноценным гайдом.
Он же говорит, что это его первая работа, тут интуитивно понятно, что эту работу не стоит брать в пример для обучения
Такого он не писал, хватит выдумывать.
 

Randewoo

Потрачен
110
33
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В большей половине темы рассказывается о том, как устанавливать это чудо техники, что уже можно считать полноценным гайдом.

Такого он не писал, хватит выдумывать.
Посмотри историю редактирования поста. Изначально это было, я днем смотрел, потом вечером зашел еще разок на бх и уже этого текста не было.