«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/04/11 16:15:23  №971850 1
ОП, можно я использую структуру твоего учебника для создания курса по РНР?
Хочу сделать блог с курсами: от сих до сих изучаешь что-нибудь, после чего можешь считать себя тем-то тем-то.
Курсы там будут по Photoshop, PHPStorm, по Yii2 уже почти готов, ну вот и хочу сделать по РНР, скопировав структуру, задачи (но там и куча других будет разных, а многих сложных и не будет - из "дополнительных").
Сам текст я переработаю, но вот структуру могу ли взять, формулировку задач?
Часть у тебя, часть у Робина Никсона, там тоже толково многое и понятно.
Аноны так-то возмутятся всё равно, наверное.
Ответы: >>971922
Аноним 2017/04/11 17:50:07  №971922 2
>>971850

А что ты подразумеваешь под структурой? Если ты используешь такие же темы уроков, но тексты сам напишешь, то это будет твое самостоятельное произведение, и тут даже мое разрешение не нужно.

Насчет задач - я в общем-то не против, бери безо всякий условий (я их все равно хочу переделать как-нибудь), но советую добавить пояснения, как их решать, примеры правильных ответов, а то как видно из треда, люди часто путаются.

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

Вообще, я давно собирался опубликовать тексты и картинки под какой-нибудь открытой лицензией creative commons (но пока не выбрал, под какой), но в этом случае там свои подвохи - надо указывать автора и надо публиковать свой текст под аналогичной лицензией. Если ты на такое готов в будущем (когда я выберу лицензию), то можешь копировать. Нет - пиши сам.
Ответы: >>972123
Аноним 2017/04/11 22:26:51  №972123 3
>>971922
Спасибо!
Картинки не думал брать, конечно. Я как раз хотел всё сделать текстом, чтобы удобно было искать интересующие моменты: я когда сам проходил всё по твоему учебнику, часто путался, постоянно пересматривал всё (в принципе, в этом тоже был плюс).
Задачи - только формулировки, пояснения и прочее хочу сделать для совсем начинающих.
Хочу ещё много добавить простых задач, чтобы после просто машинально применяли циклы разные, switch, допустим, разные встроенные функции. По ООП хочу гораздо больше всего сделать, но не с такими сложными задачами. Зандстра страницы с 80-й показался совсем сложным, не таким наглядным, каким хотелось бы всё видеть. Многое пропустил у него, а сейчас читаю про проектирование - ну неплохо, вроде бы многое понятно.
Всё это хочу сделать и для того, чтобы самому лучше понять многое.
Люблю наглядность, прогресс-бары, всякие milestones - вот просто в духе этого хочу многое реализовать, сделать такой чёткий курс.
Чувствую, что так или иначе буду и из твоего учебника черпать, вот и хотелось испросить разрешения.
Ответы: >>974353
Аноним 2017/04/16 11:17:50  №974353 4
>>971996

У тебя та же проблема что и у других начинающих: ты пишешь код стеной и не можешь вынести отдельные действия в функции. Ну например конвертирование кодировки в пути надо делать отдельной функцией, а не копипастить многократно по коду. Да и саму отдачу файла наверно тоже.

> $path = '..\\' . $file->link;
Не стоит использовать такие относительные пути, так как они высчитываются относительно текущей директории процесса (не директории в которой php-файл) и могут указывать куда угодно.

> 'attachment; filename=' . $fileName)
Это не будет работать так как в filename по стандарту можно указывать только ASCII (латинницу). Есть способ указать там кодировку, но он работает только в новых браузерах, так что лучше это поле не использовать.

> readfile($path);
> return($newResponse);
Это тоже неправильно. Ты сначала выводишь содержмое файла через readfile, а только потом возвращаешь объект ответа с заголовками, но без тела ответа. Зачем тогда этот объект Response нужен если он не содержит тело ответа?

Конечно Слим перехватывает выводимые данные и добавляет их в ответ, но это неэффективно, так как весь файл будет считан в память. Нужно использовать возможность передать поток файла в Response, и он будет выводе ответа прочтет тело из него.

Если посмотреть на конструктор Response, то там есть возможность передать в конструктор объект, соответствующий StreamInterface.

Ну и наконец, все это подразумевает отдачу файла средствами PHP. Эффективнее было бы переложить эту задачу на веб-сервер, если есть такая возможность. Она есть в Апаче с помощью модуля X-Sendfile и в нгинксе в модуле X-Accel-Redirect. От PHP скрипта только требуется указать имя файла для отдачи. Стоит добавить возможность использовать такой модуль.

>>972123

Имей в виду еще, что на это все может уйти много времени.

>>972289

Тебе надо разобраться с областью видимости переменных. Напрмер, глобальные переменные не видны внутри функций.
Ответы: >>974431
Аноним 2017/04/16 13:36:48  №974431 5
>>974353
>У тебя та же проблема что и у других начинающих: ты пишешь код стеной и не можешь вынести отдельные действия в функции. Ну например конвертирование кодировки в пути надо делать отдельной функцией, а не копипастить многократно по коду. Да и саму отдачу файла наверно тоже.
В целом понял. Я в общем-то так и думал, сделать класс типа FileDownloader и реализвать в нем разные способы отдачи файлов.
>Не стоит использовать такие относительные пути, так как они высчитываются относительно текущей директории процесса (не директории в которой php-файл) и могут указывать куда угодно.
А нормально ли будет сделать пхп-файл в котором константами будут прописаны все эти пути? Или надо как-то хитрее делать?
Ответы: >>976114
Аноним 2017/04/19 02:17:51  №976114 6
>>974431

Можно отдельный класс для отдачи файлов. Но не все можно в него помещать.

Вот допустим функция для определения полного пути к файлу. Если она нужна не только при скачивании, а где-то еще то не логично ее помещать в класс для отдачи файлов, а логично положить в какой-то вспомогательный класс, которым все могут пользоваться.

> А нормально ли будет сделать пхп-файл в котором константами будут прописаны все эти пути? Или надо как-то хитрее делать?
Лучше класс с методами, возвращающими нужные пути. Так гибче.