Общие вопросы faq по php


Содержание

Общие вопросы / faq по php

Данный сайт является частью PHPClub-а, а точнее — его базы знаний.
При этом есть несколько собенностей, которые отличают его от всех других сайтов сходной тематики:
1. Все статьи на сайте — авторские, написаны специально для сайта, а не настасканы из разных источников.
2. Статьи регулярно редактируются, для исправления ошибок и соответствия изменениям в языке.
3. Статьи написаны на самые актуальные темы, с которыми сталкивается каждый программист.
То есть, его можно (и нужно) использовать двояко:
Во-первых, как справочник — в поисках решения своей проблемы — просто просмотрев список вопросов и найдя нужный.
Во-вторых, как пособие для начинающих, собрание самой важной и актуальной информации, которая в обязательном порядке понадобится любому, кто сталкивается с PHP. Поэтому начинающим рекомендуется прочитать все статьи. Это не займет много времени.

PHP. 25 вопросов, задаваемых на собеседовании

“Одна из самых важных вещей, на которые я смотрю — это творчество человека, которого я интервьюирую. Я стараюсь найти движимых любопытством разработчиков, которые постоянно изучают новые технологии.”

Вопрос на собеседовании по PHP №1: «В чем разница между конструкциями include() и require() ?»

Конструкция include , в отличие от require , позволяет включать файлы в код PHP скрипта во время выполнения сценария.Поясним это на примере, попробовав подключить 5 файлов 1.txt, 2.txt. 5.txt. Содержимое файлов — десятичные цифры от 1 до 5 (по одной цифре в каждом файле). Создадим следующий PHP-сценарий:

Т.е. каждый из файлов был включен по одному разу прямо во время выполнения цикла! Если же мы напишем require вместо include , то возникнет критическая ошибка (fatal error).

Отличие include от require также заключается в том, что require выдает Fatal error при невозможности подключения файла по любой причине. include выдаст Warning и продолжит работу.

Вопрос на собеседовании по PHP №2: «Как мы можем получить IP-адрес клиента?»

Этот вопрос может показать интервьютеру, насколько изобретателен и креативен кандидат, т.к. ответов может быть множество. Код $_SERVER[«REMOTE_ADDR»]; является самым простым решением, но вы можете написать настоящий сценарий, отвечая на этот вопрос.

Вопрос на собеседовании по PHP №3: В чем разница между unset() и unlink() ?

unset() устанавливает переменную в “ undefined ”, в то время как unlink() удаляет файл, который отправляется из файловой системы.

Вопрос по PHP №4: что выведет на экран следующий код:

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

Вопрос с собеседовани по PHP №5: Каковы основные типы ошибок в PHP и чем они отличаются?

В PHP существует три основных типа ошибок:

Notices (замечания) Простые, некритические ошибки, которые произошли во время выполнения сценария. Примером Notices возникновения будет обращение к неопределенной переменной. Warnings (предупреждения) Более серьезные ошибки, чем Notices, однако выполнение сценария не прервется. Примером может быть подключение не существующего файла с помощью include() . Fatal (критические) Этот тип ошибки вызывает прекращение выполнения сценария. Примером фатальной ошибки будет доступ к свойству несуществующего объекта или require() несуществующего файла.

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

Вопрос, который можно услышать на собеседовании по PHP №6: В чем разница между GET and POST ?
  1. GET отправляет данные как часть URL, в то время как при POST эта информация не показывается, поскольку кодируется в запросе.
  2. GET может обрабатывать максимум 2048 символов, POST не имеет таких ограничений.
  3. GET работает только с ASCII данными, POST не имеет таких ограничений, двоичные данные также допускается.
  4. Обычно GET используется для получения данных, а POST для добавления и обновления.

Понимание основ протокола HTTP очень важно для хорошего старта в качестве разработчика PHP и различия между GET и POST являются неотъемлемой его частью.

Вопрос №7: Как вы включить сообщения об ошибках в PHP?

Установите display_errors = on в php.ini или объявите ini_set(‘display_errors’, 1) в вашем сценарии. Затем, добавьте error_reporting(E_ALL) в ваш код, чтобы отобразить все типы сообщений об ошибках во время выполнения скрипта.

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

Вопрос №8: Что такое Трейты (Traits)?

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

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

PHP-вопрос, который могут задать №9: Может ли значение константы измениться во время выполнения скрипта?

Нет, значение константы не может быть изменено, если она уже была объявлена в ходе выполнения PHP-кода.

Вопрос №10: Можно ли вы расширить определенный класс Final ?

Нет, это невозможно. Класс Final или объявление метода не позволяет дочернему классу или методу переопределять настройки.

Вопрос №11: Что делают методы __construct() и __destruct() в PHP-классе?

Все объекты в PHP имеют встроенные методы конструктор и деструктор. Метод Конструктор вызывается сразу после того, как создается новый экземпляр класса и он используется для инициализации свойств класса. Метод Деструктор не принимает никаких параметров.

Понимание этих двух PHP-методов означает, что кандидат знает основы объектно-ориентированного программирования в PHP.

Вопрос №12: Как мы можем получить количество элементов в массиве?

Функция count() используется для возвращения количества элементов в массиве.

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

“Мне бы хотелось, чтобы младший PHP-разработчик знал основы программирования и то, как применить их к PHP. Мне не нужно, чтобы он знал все функции и термины по названиям.”

Вопрос №13: Как бы вы объявили функцию, которая принимает один параметр hello ?

Если hello = true , то функция должна напечатать hello , но если функция не получает hello или hello = false , то функция должна напечатать bye .

В этом вопросе, интервьюер может оценить знает ли разработчик как объявить функцию и как он будет определять, может ли параметр быть вызван той или иной функцией. Интервьюер может также оценить знает ли разработчик синтаксис if и, если знает, как напечатать text(echo function) .

PHP-вопрос №14: Значение переменной $input представляет собой строку вида 1,2,3,4,5,6,7 . Как подсчитать сумму чисел в этой строке?

Функция explode является одной из наиболее часто используемых функций в PHP, поэтому очень важно понять знает ли разработчик эту функцию. На этот вопрос нет однозначного ответа, но ответ должен быть похож на представленный выше.

PHP Вопрос №15: Предположим, что у вас есть форма подпики на рассылку.

Эта форма имеет только одно текстовое поле input name=»email» . Как проверить является ли поле пустым и вывести сообщение «Электронная почта не может быть пустой» в этом случае.

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

Вопрос №15: Работа с классами

Реализуйте класс с именем Dragonball с атрибутом ballCount , равным нулю, и метод iFoundaBall . Когда вызывается iFoundaBall , то ballCount увеличивается на единицу. Если значение ballCount равно семи, то должно появиться сообщение «Загадайте желание«, а ballCount снова станет равен нулю.

Этот вопрос будет оценивать знание кандидатом объектно-ориентированного программирования.

PHP Вопрос №16: Какие есть 3 области видимости в PHP ?

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

PHP Вопрос №17: Что такое геттеры и сеттеры и для чего они нужны?

Геттеры и сеттеры – это методы, используемые для объявления или получения значений переменных, и, как правило приватных. Они важны, т.к. позволяют центральному расположению обрабатывать данные, объявляя и выводя их. Внутри геттера или сеттера вы можете последовательно обрабатывать данные, которые в конечном счете будут переданы в переменную или дополнительные функции. Примером этого может быть имя пользователя. Если вы не используете сеттера и просто объявите переменную $userName вручную, чтобы у вас появился результат, например: «kevin» , «KEVIN» , «KeViN» , «» и т.д. С сеттером вы можете не только изменить значение, например, ucfirst($userName) , но вы также можете обрабатывать ситуации, когда данные не валидны, например, когда «» пропущено. То же самое относится и к геттерам — когда данные возвращаются, вы можете изменить результаты, чтобы включить strtoupper($userName) для правильного форматирования в дальнейшем.

Знание о геттерах и сеттерах важно для любого программиста, который ищет работу разработка web-приложений. Геттеры и сеттеры часто используются при работе с объектами, особенно те, которые окажутся в базе данных или другом месте хранения. Поскольку PHP обычно используется для создания веб-приложений, даже младший специалист будет встречаться с геттерами и сеттерами в более продвинутых средах. Геттеры и сеттеры очень мощные, но них редко упоминают. Вы сможете произвести приятное впечатление на интервьюера, зная, что они собой представляют и как их использовать.

Вопрос с собеседования №18: Что означает MVC и что делает каждый компонент?

MVC расшифровывается как Model (Модель) View (Представление) Controller (Констроллер).

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

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

Представление – это данные, переданные контроллером и отображаемые пользователю.

В целом, в этом вопросе хорошо бы разбираться, поскольку сейчас MVC используется много где и вообще является очень хорошим шаблоном дизайна. Даже более продвинутые системы, которые работают с хранилищами и объектами, руководствуются теми же принципами, как Контроллер и Представление. Модель, как правило, просто разделить на несколько компонентов для обработки конкретных задач, связанных с базами данных, бизнес-логикой и т.д. Шаблон проектирования MVC помогает понять, что именно используется в производствах в целом.

Вопрос с собеседования №19: Каким образом можно предотвратить появление следующего предупреждения ‘Warning: Cannot modify header information – headers already sent’ (Внимание: Не удается изменить информацию в заголовке — заголовок уже отправлен) и почему оно появляется на первом месте?

Ничего не выводите в браузер до использования кода, который преобразует HTTP-заголовки. После того, как вы вызовите echo или любой другой код, который очищает буфер, вы больше не сможете присваивать «куки» или заголовки. Это также подходит к сообщениям об ошибках, поэтому если ошибка появляется до того, как вы используете команду заголовка и INI-директива display_errors установлена, это также выведет сообщение об ошибке.


Вопрос №20: Что такое SQL-инъекции и каковы наиболее эффективные методы их предотвращения?

SQL-инъекции являются методом are a method to изменения a запроса в SQL-операторе, отправленном на сервер базы данных. Этот измененный запрос затем может пропускать такую информацию, как логин\пароль, и может поспособствовать хакерам подвергнуть сервер угрозе.

Илон Маск рекомендует:  Что такое код globaldeleteatom

Чтобы предотвратить инъекции SQL необходимо постоянно проверять и удалять все вводимые пользователем данные. В PHP это часто забывается из-за простоты доступа к $_GET и $_POST , а также из-за невнимательности начинающих разработчиков. Но также существует множество методов, с помощью которых пользователи могут манипулировать переменными, используемыми в SQL, через файлы «cookies» и даже загруженные файлы. Единственный настоящий способ защиты – постоянное последовательное использование заготовленных операторов.

Не используйте устаревшие (начиная с PHP 5.5) mysql_* функции, а использовуйте PDO, т.к. оно позволяет использовать серверы, отличные от MySQL. Допускается также использование mysqli_* но в наши дни нет особого смысла не использовать PDO, ODBC или DBA. В идеале можно использовать Doctrine или Propel, чтобы избежать написания SQL-запросов всех вместе, а использовать маппинг, относящийся к объектам, который связывает строки из базы данных с объектами вашего приложения.

Вопрос №21: Что делает следующий код?

Выведет 7 . Ведущий нуль в PHP указывает на восьмеричное число, поэтому $i вычисляется как десятичное число, равное 14, а не 16.

Вопрос №22: Почему используют === вместо == ?

Если вы хотите проверить какой-то определенный тип, например, целое число или логическое значение, то === будет делать именно то, что ожидается от конкретно набранной команды, в то время как == будет конвертировать данные лишь на время и попытается сопоставить оба типа операндов. Тождественный оператор ( === ) работает быстрее, поскольку не приходится иметь дело с преобразованием типов. Особенно при проверке переменных на истина\ложь лучше избегать == т.к. 0/1 или другая похожая форма также будет принята в расчет.

Вопрос №23: Что такое PSR?

PSR является набором рекомендаций по стандартам PHP, которые направлены на стандартизацию общих аспектов PHP-разработок. Примером PSR является PSR-2, который является своеобразным гидом по стилям кодирования.

Вопрос №24: Какому PSR стандарты вы следуете? Почему нужно следовать стандарту PSR?

Лучше следовать PSR, т.к. стандарты программирования часто варьируются между разработчиками и компаниями. Это может создать некоторые проблемы у разработчика при проверке или исправлении кода, написанного другим человеком. Стандарт PSR позволяет рационализировать ожидания от стиля написанного кода, и, соответственно, уменьшить вероятность недопонимания, а в некоторых случаях и синтаксических ошибок.

Вопрос №25: Используете ли вы Composer? Если да, то какие преимущества вы нашли в нем?

Использование Composer’а – это инструмент для управления зависимостями. Вы можете объявлять библиотеки, с которыми работаете, а Composer займется их установкой и обновлением. Еще одним преимуществом является последовательный метод управления библиотеками, с которыми вы работаете, так что вы потратите меньше времени на это самое управление, занимаясь своим проектом.

Система вопрос ответ на php

У меня есть база данных с вопросами где есть три колонки. Id , answer , question. ID auto_increment индекс primary. В коде я делаю запрос на вопросы и ответы. Мне нужно, как-то привязать первый ответ именно к первому вопросу. Чтобы если был выведен первый вопрос на него был только один ответ. Всего в базе 6 строк, но их будет больше. Вот код.

2 ответа 2

Добавьте к каждый строке с вопросами в базе данных, новое поле response_id , далее соотвественно создайте в базе данных таблицу для ответов, и после получения ответа к вопросу, сохраняйте ответ в той таблице, а потом ID ответа сохраняйте в поле response_id . Таким образом вы реализуете связь ответов с вопросами.

Можно как-то так поступить БД со структурой. Одна таблица с 3-ми колонками.

и код question.php

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.12.35408

FAQ: Объектно-ориентированное программирование на PHP

Когда нужно пользоваться ООП возможностями PHP?
В случаях, когда необходимо объединить несколько свойств (данных) и методов (функций) работы в одной «переменной», которая в данном случае будет называться объектом. Это общий принцип из которого, однако, могут быть исключения: можно просто группировать функции по определенному признаку.

Как пользоваться ООП в PHP?
Для работы с объектами их необходимо создать. Делается это так:

Как создать класс?
Без премудростей наследования, так:

Где ClassName – имя класса, естественно вы можете писать здесь любое «имя» в пределах правил именования функций, но не забывайте и о ключевых словах: называть ими класс – наживать себе проблем.

Что может составлять класс, как это описывается в коде?
Внутри класса могут быть описаны следующие сущности:
Свойства (свойства объекта) – переменные, являющиеся данными объекта.

private – можно обращаться к этому члену только внутри методов (статических и обычных) данного класса. Зачем так ограничивать себя? Все просто: некоторые функции нежелательно вызывать вне класса, т.к. они могут изменять важные данные, которые нежелательно изменять вне логики работы класса. Другими словами, private члены скрывают те методы и свойства, которые нам не нужны в ходе работы с объектом (когда создали его через new, см. вопрос «Как пользоваться ООП в PHP?»). Обычно это «рабочие лошадки» — вспомогательные функции, более мелкие детальки порой большого механизма класса, вызов которых вне класса не имеет смысла или опасен. private методы не доступны в производных классах.
protected – члены, помеченные данным модификатором, можно будет использовать в производных классах. Точнее говоря, можно будет получить к этим членам доступ. В остальном – то же, что и private, т.е. члены нельзя использовать в вызывающем коде, только в методах класса или методах его наследников.

Как обращаться к статическим, а как к нестатическим членам?
Вне зависимости от места, где вы запрашиваете член (т.е. private он или public не важно), вы должны обращаться к статическим и нестатическим членам (членам объекта) по-разному. Представим, что у нас есть переменная $c, которая является объектом класса ClassName:

Что такое «волшебные» методы (magic methods)?
Это методы, которые имеют особое значение, потому как их вызываете не вы, а PHP в определенные моменты. Чтобы не контролировать наступление этих моментов и не вызывать функции вручную вы можете добавлять к своим классам «магические» методы и быть уверенным в том что они будут вызваны автоматически. Все «магические» методы начинаются с двойного символа подчеркивания __ и являются методами объекта (не static), кроме двух: __callStatic и __set_state.
Перечислим их все:

void __construct ( mixed $arg1[, mixed $arg2[, . ]])
Когда: Вызывается при создании экземпляра объекта. Имеет входное количество параметров таким каким его задаст пользователь, т.е. вы.

void __destruct ()
Когда: в момент когда объект подвергается сборке мусора. Т.е. завершает своё существование.

mixed __get (string $name)
Когда: при попытке запросить свойство объекта, которого он не имеет (или недоступному из за private/protected модификатора). Именно имя этого несуществующего свойства он и передаст в качестве первого параметра. А что с этим делать – ваша забота.

void __set ( string $name, mixed $value)
Когда: запустится, если вы попытаетесь несуществующему (или недоступному из-за private/protected модификатора) свойству присвоить какое-либо значение. В функцию будут переданы имя этого свойства и значение, которое ему пытались установить.

mixed __call ( string $name, array $args)
Когда: вызовется, если у объекта была попытка выполнить несуществующий метод. Первым параметром будет имя этого метода, а вторым будет массив входных параметров, которые пытались этой функции передать.

mixed __callStatic ( string $name, array $args)
Когда: аналогично __call, но работает с несуществующими статическими методами, т.е. методами которые были вызваны через синтаксис ИмяКласса::ИмяМетода, но не были найдены в классе.

string __toString ()
Когда: вызывается, когда объект пытаются использовать как строку, например, в случае если вы хотите вывести объект через echo. Объект будет представлен как строка, так как вы захотите – он будет представлен тем, что будет возвращено этим методом, т.е. return обязателен.

void __clone ()
Когда: после клонирования объекта оператором clone. Внутри этого метода вы можете использовать $this, чтобы изменить клон который создается.
Зачем: Если в классе используются объекты, то обычное клонирование скопирует лишь ссылки на них, и новых экземпляр будет привязан к данным которые находятся не только внутри него, но и в том объекте из которого он клонировался. Выход — клонировать необходимое вручную внутри __clone

bool __isset ( string $name)
Когда: сработает при проверке с помощью isset() несуществующих свойств у данного объекта.

void __unset ( string $name)
Когда: вызовется, когда применяют функцию unset() на несуществующем свойстве класса. Принимает в качестве первого параметра имя этого свойства.

object __set_state ( array $properties)
Когда: внутри вызова var_export(), первым параметром принимает свойства объекта которые собирается сохранить система. Если сделать eval полученного кода, вызовется эта функция — а дальше сами думайте зачем оно вам надо

mixed __invoke ( mixed $arg1[, mixed $arg2[, . ]])
Когда: вызывается, когда объект используется в стиле функции. В метод __invoke передаются все параметры, которые вы передали, используя объект в качестве функции. Но они передадутся не в одном первом аргументе, а в обычном виде. Чтобы получить параметры в массиве можно, конечно же, воспользоваться функцией func_get_args()

array __sleep ()
Когда: вызывается внутри функции serialize и определяет какие члены объекта надо сохранить, для этого вы должны вернуть массив содержащий строки-имена членов которые должны быть записаны.

void __wakeup ()
Когда: вызывается когда метод «просыпается» десериализацией внутри unserialize

Для чего нужны конструкторы и деструкторы, когда они вызываются, как их добавить к классу?
Конструктор – функция класса под именем __construct
Будьте внимательны – именно два нижних подчеркивания.
Эта функция вызывается не вами, а интерпретатором PHP когда вы создаете новый объект через new.

Junior PHP, что бы вы спросили на собеседовании?

Джуниор джуниору рознь и в разных конторах разные требования, но в идеале вам нужно знать и уметь:
PHPStorm, PSR, чистый самодокументированный код
Composer, автозагрузка классов
Базовое понимание ООП, статический и динамический контекст, умение применять на практике
Git, работа с ветками, мерджи, разруливание конфликтов
Индексы в БД, какие, для чего нужны, составные индексы, какие недостатки имеют
Джоины в БД, подзапросы, группировка
— Внешние ключи в БД, минимум по нормализации данных
JS, jQuery, HTML, CSS, хоть минимально

Все остальное индивидуально, в зависимости от требований.

Джоины в БД, подзапросы, группировка

Виталий IIIFX Хоменко: зависит от потребностей проекта. Бывает что и ручками, ага. Не вижу в этом ничего плохого. А упоение системами автоматического управления пакетами рано или поздно приводит к тому, что ради функции hello_world() подключают 5 пакетов с кучей зависимостей.

Общие вопросы / faq по php

Этот раздел содержит общие вопросы о связи между PHP и базами данных. Да, сегодня практически любая база данных может быть доступна из PHP.

На Windows машинах, вы просто используете поддержку ODBC и соответсвующий ODBC драйвер.

На Unix машинах для доступа к Microsoft SQL серверам вы можете использовать Sybase-CT драйвер, так как они (по крайней мере в основном) совместимы по протоколу. У Sybase есть бесплатная версия необходимых библиотек для Linux . Для других Unix систем вам необходимо обратиться в Sybase за соответствующими библиотеками. Также смотрите ответ на следующий вопрос.

Да. Если всё полностью выполняется под Windows 9x/Me или NT/2000, то у вас уже есть все необходимые средства, так как для баз данных Microsoft Access вы можете использовать ODBC и драйверы ODBC от Microsoft.

Если вы хотите связать PHP, выполняющийся на Unix, и MS Access на Windows, то вам будут нужны драйверы ODBC для Unix. Такие ODBC драйверы для Unix есть у OpenLink Software . По бесплатной пилотной программе вы можете скачать пробную копию без срока истечения, а цены на комерчески поддерживаемую версию начинаются от 675$.

Другая возможность — хранить данные на SQL сервере, который имеет ODBC драйверы для Windows, и затем обращаться к этой базе данных из Microsoft Access (используя ODBC) и из PHP (используя встроенные драйверы) или использовать промежуточный формат понятный и для Access, и для PHP, как то последовательные файлы или базы данных dBase. По этому поводу Тим Хэйз (Tim Hayes) из OpenLink software пишет:

Использование промежуточной базы данных — не очень хорошая идея, когда есть возможность работать с базой данных на прямую из PHP через ODBC, например с драйверами от OpenLink. Если вам всё-таки надо использовать промежуточный формат, OpenLink выпустил Virtuoso (механизм виртуальной базы данных) для NT, Linux и других платформ Unix. Пожалуйста, посетите наш web сайт для бесплатной загрузки.

Другой проверенный вариант — использовать MySQL с её MyODBC драйверами на Windows и делать синхронизацию баз данных. Стив Лоренс (Steve Lawrence) пишет:

Скачайте MyODBC драйвер для Windows с сайта MySQL. Последний релиз — myodbc-2_50_19-win95.zip (доступен также для NT и как исходный код). Установите его на вашей Windows машине. Вы можете проверить его работоспособность с помощью поставляемых с ним утилит.

Создайте пользователя или системный dsn в вашем администраторе ODBC, расположенном в контрольной панели. Создайте dsn имя, введите имя хоста, имя пользователя, пароль и т.д. для вашей базы данных MySQL, сконфигурированной на 1-ом шаге.

Запустите полную инсталяцию Access, это даст вам уверенность, что вы получите все нужные добавки (add-ins). По крайней мере вам будут необходимы поддержка ODBC и администратор связанных таблиц.

И теперь самое интересное! Создайте новую базу данных Access. В окне таблицы щёлкните правой кнопкой мышки и выберите Link Tables (Связать Таблицы), либо из файлового меню выберите Get External Data (Получить Внешние Данные) и затем Link Tables. В появившемся окне просмотра файлов выберите файлы типа ODBC. Выберите системный dsn и имя вашего dsn, созданного на 3-ем шаге. Выберите таблицу для связи, нажмите OK и вуаля! Теперь вы можете открыть таблицу и добавить/удалить/отредактировать данные на вашем MySQL сервере! Вы также можете строить запросы, импортировать/экспортировать таблицы в MySQL, создавать формы и отчёты, и т.д.

Полезные Советы и Трюки:

Вы можете построить ваши таблицы в Access, экспортировать их в MySQL и затем привязать их назад. Это убыстряет создание таблиц.

При создании таблиц в Access, вы должны определить первичный ключ, чтобы иметь доступ к таблице по записи. Убедитесь что вы создали первичный ключ в MySQL перед тем как привязать таблицу к Access.

Если вы изменяете таблицу в MySQL, то вы должны связать её с Access по-новой. Идите в tools>add-ins>linked table manager, следуйте к вашему ODBC DSN, и выберите оттуда таблицу для пересвязки. Там же вы можете изменить источник вашего dsn, для этого, перед тем как нажать OK, просто пометьте «always prompt for new location» (всегда запрашивать новое местонахождение).

Вероятнее всего PHP 4 был скомпилирован с опцией —with-mysql без задания пути к MySQL. Это означает, что PHP использует его встроенную клиентскую библиотеку MySQL. Если на вашей системе выполняются приложения (такие как PHP 3, в виде паралельного модуля Apache, или auth-mysql), которые используют другие версии MySQL клиентов, то возникает конфликт между двумя разными версиями этих клиентов.

Илон Маск рекомендует:  Что такое код sum()

Обычно, перекомпиляция PHP 4 с указанием пути к MySQL в опции ‘—with-mysql=/your/path/to/mysql ‘ решает эту проблему.

Да. PHP всегда будет поддерживать MySQL в том или ином виде. Единственное что изменилось в PHP 5 — это то, что мы больше не поставляем саму клиентскую библиотеку. Вот некоторые причины для этого:

Сегодня клиентские библиотеки уже установлены на большинстве систем.

Учитывая предыдущий пункт, имея несколько версий, проще запутаться. Например, если вы компонуете mod_auth_mysql с одной версией, а PHP с другой, и затем разрешаете оба в Apache, то вы получите хороший жирный крах. Также, поставляемые библиотеки не всегда дружат с установленной серверной версией. Наиболее очевидный симптом этого — разногласие по тому где искать файл mysql.socket (файл Unix сокета).

Также поддержка была вялой и отставала от релизов всё больше и больше.

Последующие версии библиотеки будут под GPL и мы не можем поставлять библиотеку под GPL с проектом лицензируемым по типу BSD/Apache. Поэтому полный разрыв в PHP 5 видится как самый лучший вариант.

На самом деле это заденет не так уж много людей. Пользователи Unix, по крайней мере те, кто знает что они делают, всегда были склонны собирать PHP с уже установленной на их системе библиотекой libmesqlclient, просто задав опцию —with-mysql=/usr при сборке. Пользователи Windows могут включить расширение php_mysql.dll внутри php.ini . Также убедитесь, что libmysql.dll доступен в системном PATH. О том как — читайте FAQ: установка системного PATH в Windows . Так как libmysql.dll (и многие другие PHP файлы) находится в папке PHP, вам лучше добавить PHP папку в ваш системный PATH.

Это происходит если вы скомпоновали ваши библиотеки MySQL с pthreads. Проверьте используя ldd. Если это так, скомпилируйте MySQL из исходников или перекомпилируйте исходный rpm, отключив поточный код клиента в файле спецификации. Любой из этих вариантов исправит проблему. Затем перекомпилируйте PHP с новыми библиотеками MySQL.


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

= mysql_query ( «SELECT * FROM tables_priv» );
if (! $result ) <
echo mysql_error ();
exit;
>
?>
или
= mysql_query ( «SELECT * FROM tables_priv» )
or die( «Bad query: » . mysql_error ());
?>

Пред. Начало След.
Получение PHP Уровень выше Установка

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

phpBB Guru — Официальная русская поддержка форума phpBB3

скачать русский перевод, моды, скины и стили для phpBB, phpBB3

  • Темы без ответов
  • Активные темы
  • Поиск
  • Темы пользователя
    • >в конференции
    • >>в форуме
  • Сообщения пользователя
    • >в конференции
    • >>в форуме
    • >>>в теме

[FAQ] php код в html-шаблонах

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ).

[FAQ] php код в html-шаблонах

Сообщение TROODON » 25.05.2008 22:43

Re: php код в стилях

Сообщение FladeX » 25.05.2008 22:49

Re: php код в стилях

Сообщение TROODON » 25.05.2008 22:56

Re: php код в стилях

Сообщение Mr. Anderson » 25.05.2008 23:09

Re: php код в стилях

Сообщение TROODON » 26.05.2008 0:26

Re: php код в стилях

Сообщение Палыч » 26.05.2008 0:31

Re: [FAQ] php код в стилях

Re: php код в стилях

Сообщение Rayden » 21.09.2008 14:47

Re: [FAQ] php код в стилях

Сообщение Gorbushka » 08.01.2009 17:12

Вставляю php путём:

Однако шаблон кэшируется. Соответственно возникает ошибка, мол такого файла нет. Решил просто — скопировал файл PHP в папку кэша. Однако теперь другая проблема:
Результат выполнения PHP тоже скэшировался. Т.е. изменение в шаблоне не происходит в зависимости от изменения выводимого PHP-кодом.

Вопрос: как отключить кэширование части шаблона? В частности интерисует подвал форума.

Как нанять php программиста в 2020 не потеряв лишнего времени

Так сложилось, что я не часто менял работу и не имел большого опыта прохождения собеседований. Зато у меня был большой опыт проведения технических интервью (здесь и далее синоним собеседования). Статья не претендует на открытие чего-то нового. В феврале с некоторым шумом закрылся стартап, где я работал в качестве тимлида. Я искал работу до середины мая. За это время я прособеседовался в десятках компаний. Это был великолепный экскурс на обратную сторону диалога соискателя и работодателя. Я был удивлен до какой степени банальные вещи пропускаются hr-ами даже в крупных агентствах.

Далее рассказ как правильно с точки зрения программиста организовать собеседование.

Базовой ситуацией стоит считать, что у hr есть резюме программиста.
Работодателю необходимо составить и опубликовать (или отправить соискателю) текстовое описание вакансии. Бесполезно сразу звонить и голосом описывать вакансию.

Повторюсь, в этом нет ничего нового. Но пару раз в телефонном звонке сразу после названия фирмы меня звали на собеседование и просили сообщить доступное время.
Из наименования вакансии “старший/ведущий php-разработчик” можно догадаться только о том, что предстоит разрабатывать на php. А если по телефону пытаться рассказывать больше, то ничего из этого не запомниться. Единственное когда стоит сперва звонить — если соискатель сам об этом явно просит. Например выставив желаемый способ связи на известном сайте.

Итак что указывать в вакансии?

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

  • название
  • текстовое описание фирмы и ее деятельности — тут у hr не возникает обычно проблем
  • текстовое описание основного вида деятельности и задачи отдела/должности будущего работника
  • обязательный технический стек — что должен знать соискатель
  • сопутствующий технический стек — с чем еще предстоит работать соискателю
  • условия труда — если вас их постоянно спрашивают, значит можно дополнить
  • тестовое задание

Почему название важно?

Что вы первое прочли в этой статье? Так или иначе, скорее всего дойдя до этого места название вы уже видели. Но я расскажу почему название важно для разработчика.

Во первых подавляющему числу соискателей все равно написано в вакансии “php-разработчик”, “php-developer”, или даже “PHP-инженер-программист”. Не загромождайте название синонимами. Добавьте что-то важное для вас. Или что-то важное для соискателя. Самый простой способ дать более точное название вакансии, это уточнить с чем придется работать (часть обязательного стека). Например укажите базу данных или фреймворк: “php+mysql developer”, “php (symfony) developer”. Среди моих знакомых много тех, кто ориентируется на основную используемую базу данных и фреймворк.

И особенно много тех кто избегает использования всем известного отечественного “фреймворка”

Что делать-то предстоит?

Складывается ощущение, что hr надеются скрыть проблемы будущей должности и не пишут эту часть. В результате основные задачи выясняются уже на очном собеседовании. На что здесь обращает внимание программист. В основном тут ожидаются следующие фразы “code review”, “легаси код” (обычно даже так: “умение разбираться в чужом коде”), “трекер задач”, “управление командой”, “планирование сроков и ресурсов”.

Обычно эти фразы разбросаны по простому тексту, но бывает и представлены в виде списка. Так или иначе здесь стоит быть наиболее откровенным с будущим работником. Его стоит предупредить о сложностях командного взаимодействия и о текущих проблемах.

Если проблемы продукта это как раз задача разработчика, то командное взаимодействие уже не такой однозначный вопрос. Здесь стоит обозначить все те аспекты с которыми придется работать в любом случае. Например:

  • Работа с фрилансерами и/или фирмой подрядчиком — мне достаточно часто встречались такого рода вакансии. Обычно есть уже некая собранная удаленная команда, над которой ставится штатный сотрудник.

  • Ограничение службы безопасности. Может в офисе работодателя действует особый пропускной режим, а на машинах стоит только windows и все сотрудники лишены административных прав.

Используемый стек технологий

Есть старый анекдот “Если бы водителей нанимали как программистов”. Современные реалии все же несколько приятнее. В большинстве вакансий есть разделение требований на 2 списка (обязательный и дополнительный). Проблема в том что заголовок дополнительного списка “Будет плюсом знание:” мало информативен. У соискателя возникает ряд вопросов:

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

Обозначайте применимость дополнительного списка.

Пишите только реально используемые версии софта (включая минорную). “PHP 7.1” — гораздо более информативная запись нежели “PHP 5-7”.

Тестовое задание, тест в браузере, или просто вопросы по телефону.

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

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

Так или иначе задание должно выполняться за достаточно короткий промежуток времени (от 15 минут до 4х часов). Если вы до очного собеседования берете на себя обязательства по проверке решения задания, вы формируете ожидание у соискателя, что он получит результат проверки. Сказать “нет, не правильно” уже будет недостаточно.

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

Звонки и почта как способ избежать собеседования.

Еще выступая на стороне работодателя, я обратил внимание, что все больше соискателей предлагают первую встречу провести в видео чате. А в начале своих поисков работы я не сразу догадался до такого же приема. Переломным моментом стал визит на очное собеседование в известное технологическое представительство одного банка на вакансию “web-разработчик”. Где по просьбе собеседующих я рассказал немного о себе, а после услышал вопрос: “А как у вас с js?”

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

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

  • На сколько пунктов по тесту Джоэла оценивает себя команда? https://habr.com/company/jugru/blog/159689/
  • Какой текущий/планируемый состав команды разработки (технические специалисты)?
  • Команда расширяется или ищется замена ушедшему сотруднику? (Что случилось с занимавшим эту должность сотрудником? / В связи с чем расширение штата?)
  • Используется ли база данных? Пишутся ли миграции? Кто и как проверяет миграции базы данных перед релизом?
  • Как настроен ci/cd? Если никак, готовы и потратить месяц на настройку?
  • Кто и как ставит задачи?
  • На какой машине придется работать?
  • Есть ли что-то еще о чем я не спросил, но мне стоит это знать?

К этим и прочим вопросам нужно быть готовым еще при первом звонке/письме.

Ожидаемо что вопросы есть и к соискателю. Стоит задавать вопросы так чтобы соискатель мог наиболее коротко и однозначно на них ответить. На самом деле первый диалог с соискателем HR должен воспринимать как способ проверить ценность будущей встречи. У вас никогда не было ситуации что собеседование перестает иметь смысл уже после 2-4 вопросов? Записывайте вопросы которые привели к досрочному окончанию встречи. Ниже приведу краткий перечень таких вопросов, накопленных личным опытом.

  • (Кратко озвучиваются основные положения вакансии) все верно?
  • Почему уходите с предыдущего места работы?
  • Как скоро вы готовы выйти к нам в случае получения предложения?
  • При выходе на работу потребуется паспорт, трудовая … (перечень необходимых документов). С этим проблем не возникнет?
  • Готовы ли вы выполнить небольшое тестовое задание на очном собеседовании?

Если HR может оценить правильность ответов на технические вопросы это замечательно и этим нужно пользоваться. Такие вопросы должны подразумевать краткие ответы. Да и сами вопросы должны легко восприниматься на слух. Опять же спрашивайте максимально близкие темы к востребованной ежедневной работе специалиста. Ниже приведу пример некоторых таких вопросов:

  • *nix/cli: Как посмотреть последние несколько строк текстового файла (лога)? А как следить за его наполнением?
  • *nix/cli: Вы написали php скрипт для запуска в консоли. Как посмотреть существует ли процесс?
  • *nix/cli: Есть папка с изображениями как узнать ее размер?
  • php: Какой вариант проверки существования данных в массиве наиболее быстрый? Почему?
  • php: Используете ли вы declare(strict_types=1)? Почему?
  • sql: Спрашивайте общие вопросы не зависящие от конкретной реализации базы данных, если речь идет о наборе не специалиста узкого профиля.
  • sql: Есть таблица с комментариями. У коментариев есть оценка (целое положительное число).Как выбрать топ 10 комментариев? Как выбрать все комментарии с максимальной оценкой?
  • sql: Какие индексы существуют?
  • sql: Какие виды блокировок существуют?
  • sql: Что такое ACID? Какие уровни изоляции существуют?

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

Очное собеседование

Итак, пора назначить встречу с соискателем. Будьте последовательны. Предупредите кандидата о длительности встречи, о предполагаемом составе, о тестовых задачах. Спросите о удобном времени для собеседования. В идеале у вас уже должен быть размечен весь доступный временной интервал — все участники собеседования в офисе + свободная переговорка.

Не стоит удивляться, что сейчас кандидаты зачастую могут приехать только с 19 часов. Иногда поступают предложение провести собеседование в выходные. В таких случаях можно предположить, что соискатель работает и однозначно не уверен в том, что хочет перейти именно к этому работодателю. Видимо предыдущие письма и звонки не были достаточно убедительными. Собеседование в нерабочее время уже не новинка. Но обеим сторонам нужно быть уверенными, что оно не закончится через 4 минуты фразой “вы нам не подходите”.

Так или иначе после согласования даты и времени по телефону обязательно пришлите приглашение на встречу по почте (с указанием адреса и схемы проезда).

Кто должен присутствовать на встрече

Сейчас уже ни для кого не секрет, что очное собеседование делится на 2-3 части по составу собеседующих (hr, технический специалист, руководитель). Действительно такое разделение во времени помогает использовать ресурсы оптимально. Этот подход взят на вооружение почти везде и никого не смущает. Но есть различное понимание как эти части должны быть отделены. И зачастую предполагается несколько очных собеседований. В моем понимании, это плохая практика. Работодатель таким образом заставляет соискателя потратить время на 4-6 поездок. В случае крупных городов это легко может в сумме превысить время рабочего дня.

Ёмко, а не быстро.

Идеальная ситуация в найме технического специалиста это всего 2 письма (описание вакансии и приглашение на встречу) , один телефонный звонок (уточнение всех вопросов и назначение даты встречи), и одна встреча в офисе фирмы. Этого на самом деле достаточно. Если у вас более сложный поток обработки вакансий — переносите его на почту и звонки.

Илон Маск рекомендует:  Что такое код zip_entry_close

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

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Часто задаваемые вопросы (FAQ) по PHP

Часто задаваемые вопросы (FAQ) по PHP

FAQ взят из конференции fido7.ru.php, дополняется и пополняется из той же конференции, а также из других источников. FAQ по PHP разрабатывается.


1. Общие вопросы


1.1 Что такое PHP?

(перевод документации) «PHP, что означает ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’), является внедряемым в HTML языком описания скриптов.

Многое из его синтаксиса было позаимствовано из C, Java и Perl с добавлением некоторых уникальных, специфичных для PHP, особенностей.

Целью создания языка является предоставление web-разработчикам возможности быстрого создания динамически генерируемых страниц.»

1.2 Где взять PHP?


1.3 Как расшифровывается ‘PHP’?

‘PHP’ — это рекурсивный акроним (аналогия с ‘Linux’ — ‘Linux Is Not UniX’) словосочетания ‘PHP: Hypertext Preprocessor’ (‘PHP: Предварительный Обработчик Гипертекста’), что успешно отражает общую идеологию его функционирования.

До версии PHP 3.0 название было несколько иным (‘PHP/FI’) и расшифровывалось как ‘Personal Home Page tools / Forms Interpreter’ (‘Утилиты для Домашней Страницы / Интерпретатор Форм’).

2. Сетевые дела


2.1 Почему с’апложенные jpeg-файлы не отобpажаются? (бьются?) Веб-сервер — русский Апач

Все дело в том, что русский Апач по умолчанию производит перекодировку файлов.
Так, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20).
Для борьбы с этим эффектом нужно добавить в конфигурационный файл Апача httpd.conf следующее:

2.2 Как опpеделить валидность e-mail?

Функция, предложенная Maxim Matyukhin

Есть другой способ, использующий сокеты, предложенный Jon S. Stevens

2.3 Как опpеделить валидность URL?

Лично я использую следующую функцию:

3. PHP и БД


3.1 Имеем MySQL. Добавляем запись с автоинкрементным уникальным индексом. Как узнать значение последнего индекса?

Есть замечательная функция mysql_insert_id ([идент. соединения]). Возвращает целое значение, которое и есть необходимый идентификатор, сгенерированный полем AUTO_INCREMENT в последем операторе INSERT.

Подробно см. в доках по функциям PHP.

4. PHP на Win32


4.1 Скрещивание PHP/Win32 и Apache/Win32

Предполагается, что вы уже установили PHP и Apache. Для внесения пущей ясности положим, что PHP установлен в каталоге ‘C:\HTTP\php’, а Apache в ‘C:\HTTP\apache’, причем Apache уже настроен и без лишней ругани отзывается на имя localhost, а необходимые изменения внесены в php.ini. Теперь определимся, каким образом PHP будет функционировать: в виде CGI-приложения [1] или как SAPI-модуль Apache [2] (разбор полетов на предмет различий см.)

1. Hастройка PHP в качестве CGI-приложения.

FAQ форума Программирование::PHP

Давайте его к человеческому (современному) виду приведём .

Оглавление

Как правильно читать ман. Все перечитал, а нужного не нашел…

Полезные ссылки

  1. http://www.google.com. Это, без шуток, самая важная ссылка по PHP. При некотором умении в ней можно нейти ответ на любой вопрос. Но даже и не обладая особыми навыками в поиске, можно получать потрясающие результаты. Например, просто введите в строку поиска ту ошибку, которую выдал РНР.
  2. Языки программирования — PHP на webclub.ru — www.webclub.ru/content/programming_php. Ссылка оставлена в мемориальных целях…
  3. Официальная документация по PHP. Самая главная, полная, подробная и актуальная, с комментариями пользователей.
  4. Собрание ссылок на различные варианты документации, в том числе и русские переводы — http://phpfaq.ru/docs
  5. phpfaq.ru — Ответы на САМЫЕ ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ. Обязательно к прочтению. Вы обязательно столкнетесь с каждым из освещенных там вопросов.
  6. Клуб российских PHP разработчиков — http://www.phpclub.net/. Там же — самая мощная система форумов по PHP в России.
  7. Самый известный, наверное, российский ресурс — PHP по-русски.
  8. Сайт Дмитрия Котерова, автора книги «Самоучитель по РНР», постоянного посетителя данного форума. Содержит значительное количество интересных материалов и оригинальных разработок, таких как «Денвер» и «Орфо».
  9. WebScript.Ru — каталог Internet, в котором собраны преимущественно свободно распространяемые скрипты, документация по языкам программирования Perl и PHP. Неплохой форум.
  1. ЧПУ и PHP — Дмитрий Смирнов пишет про ЧПУ (Человекопонятный УРЛ :-), в том числе — и про обработку 404-й ошибки (когда запрашиваемый документ не был найден).
  2. Числа прописью.
  3. PHP в деталях. Собрание авторских статей на самые разные темы, посвященные РНР и часто задаваемым вопросам по нему.
  4. Помоги себе сам: как правильно задавать вопросы. Обширный текст, который реально может помочь с тем, как найти ответ на свой вопрос, и как правильно задать его в форуме.

Некоторые западные ресурсы:

  1. http://www.phpwizard.net/ — ресурс, ориентированный на PHP. Проекты (такие как phpMyAdmin, phpChat), ссылки, руководства и т.п.
  2. http://www.phpbuilder.com/ — статьи. Много и умные.
  3. http://www.zend.com/ — «Zend — лидер в технологии PHP. Наша миссия — в том, чтобы обеспечить коммерческую жизнеспособность и поддержку PHP решений для Web.»
  4. http://www.soysal.com/PHPEd/ — небольшой редактор, сделанный по подобию HomeSite, но для PHP.
  5. http://www.hotscripts.com/PHP/ — одно из самых больших собраний готовых скриптов.
  6. http://sourceforge.net/ — сервис для разработчиков, работающих по принципу Открытого Исходного Кода: форумы, исходники и т.п.
  7. http://www.devshed.com/Server_Side/PHP/
  8. WeberDev.com (англ.) — «…был задуман в качестве демонстрации примеров кода, так, чтобы это было более легко для программистов новичка в области php…»
  9. Графическая библиотека GD (англ.) — A graphics library for fast image creation.

Передача из формы параметров с множественным значением (коллекция SELECT multiple и т.п.)

При передаче данных из одного файла PHP далее для обработки передается массив вида имя_элемента => значение. Но есть некоторые элементы (например, select с опцией множественного выбора multiple), где в качестве значения фигурирует не одно, а группа (коллекция). Что делать в этом случае?

В этом случае в принимающий PHP-скрипт попадет массив под именем $_REQUEST[‘collect’] , содержащий все выбранные значения.

Подобный прием можно использовать для объединения в коллекцию и других параметров формы:

Как сделать upload картинки через форму?

Простой HTML-код для организации закачки файла с компьютера пользователя выглядит так:

Принимающий скрипт выглядит примерно так:

Замечание: Достаточно частой ошибкой является перекодирование http-сервером принимаемых данных. Если у Вас русский Apache, то эта проблема исправляется выставлением директивы:

Эта директива может быть выставлена как в файле httpd.conf, так и в .htaccess.

Как я могу вызвать PHP-скрипт внутри другого скрипта и передать туда некоторые переменные? Что-то аналогичное для SSI

Используйте include «second.php»; или require «second.php»;

Вложенный таким образом скрипт будет включен в место вызова этих конструкций, как если бы вы вставили его туда с помощью Copy-Paste.

Как можно прочитать строку из файла?

Помимо использования функция fgetc , fgets и fgetss , Вы можете использовать $file = file($filename) . Функция file читает файл $filename в массив $file.

Прочитать в одну переменную весь файл целиком можно с помощью функции file_get_contents .

Как передать значение переменной из PHP скрипта в функцию JavaScript или в HTML-код?

Просто вывести их как . Пример:

Как я могу перенаправить посетителя на другой URL из PHP-скрипта?

Как сделать так, чтоб не выдавалась строка «Content-Type…», когда я запускаю PHP из командной строки?

Некоторые параметры вызова php:

Я использую шифрование паролей с помощью UNIX. Как мне проверить соответствие введенного пароля зашифрованному?

Такое шифрование, то есть хеширование, является односторонним. Это означает, что вы не можете декодировать зашифрованный пароль — вы можете только сравнить два зашифрованных пароля. Например:

Как узнать URL выполняемого скрипта, страницу, с которой пришел посетитель и т.п.?

В PHP (и не только) существуют предопределенные переменные окружения веб-сервера. Ниже — список для сервера Apache. Как сказано в руководстве: «если Вы используете другой веб-сервер, мы не гарантируем наличия всех, нижеприведенных переменных».

Вот некоторые из таких переменных:

Полный список находится в разделе Predefined variables руководства по PHP. Также список всех переменных окружения и настроек PHP можно вывести функцией phpinfo . Рекомендуется запускать ее для проверки на каждом новом для Вас хостинге. Встречаются некоторые коварные хостинги, на которых переменные окружения Апача могут определяться не совсем так, как вы ожидаете.

Дело в том, что Cookie явлается частью HTTP -заголовка документа. Вызов функции setcookie должен происходить до окончания вывода HTTP-заголовка (подробнее см. Hypertext Transfer Protocol — HTTP/1.1).

На практике это означает, что если перед вызовом setcookie() есть какой-либо вывод — echo, HTML-текст вне PHP-кода, или если PHP-скрипт, устанавливаюший Cookie, вызывается включением SSI через — то setcookie() выдает ошибку или (в последнем случае) cookie просто не установится.

Если Вы не можете вызвать setcookie() в начале скрипта, то можно включить буферизацию вывода. Для этого вставьте вызов функции ob_start раньше любого вывода в браузер:

Эта функция заставит PHP ждать, пока отработает весь скрипт, и только потом отдавать данные веб-серверу. Таким образом можно отправлять заголовки в любое время независимо от выводимой информации.

Как отследить повторный вызов скрипта при обновлении страницы?

Скрипт отрисовывает форму и посылает данные post-ом самому себе. Если все правильно — добавляем запись и делаем перенаправление с помощью заголовка Location (перенаправление помешает пользователю отправить те же самые данные дважды путем рефреша страницы). Если не все правильно — опять рисуем форму и выдаем сообщение об ошибке.

Как отключить кеширование страницы PHP-скрипта?

Для этого нужно выставить следующие заголовки:

Работа с сокетами. Пример: как скачать файл(страничку) через прокси.

Прокси-сервер: IP: 192.165.0.10 PORT: 3128

(с) Сергей Захаров (aka ERge) [досье]

Ручной Download, или как скриптом открыть пользователю окошко сохранения файла.

Чтобы в браузере открылся диалог «Сохранить файл» с названием файла file.dat, скрипт должен послать такие заголовки:

Не мешало бы также ссылаться на скрипт как http://. /download.php?file.dat , иначе браузеры, основанные на Mozilla, могут попытаться записать файл как file.dat.php.

Примечание: Не используйте заголовок Cache-Control: no-cache в таких скриптах — большинство версий Internet Explorer не смогут скачать файл. (c) Владимир Палант [досье]

Настройка PHP с помощью файла .htaccess

Многие опции, обычно указываемые в файле php.ini, могут быть изменены с помощью файла .htaccess. Существует два формата:

Разумеется, следует помнить о том, что действие .htaccess распространяется на текущую и вложенные директории, и в конфигурации Апача должна быть задана опция AllowOverride Options (или AllowOverride All ). Подробнее про работу с .htaccess читайте в руководстве по Apache.

Как заставить Sablotron говорить по-русски?

Обновление картинки, сформированной php-скриптом

  1. Выдавать заголовки, отключающие кеширование.
  2. Добавлять в конец ссылки, запрашивающей картинку, какую-то случайную величину:

Удобно в качестве случайной величины использовать дату модификации картинки, если таковую возможно получить.

Как из РНР узнать разрешение экрана у пользователя?

Никак. РНР исполняется на сервере и ничего о компьютере клиента не знает.

В php.ini отключено использование cookies для передачи SID в сессиях, но PHP всё равно пытается передавать SID в куках и не пытается даже подставлять SID в ссылки.

Убедитесь, что нужные параметры выставлены правильно:

Где можно найти информацию для начинающих в РНР?

Где взять русскую документацию по РНР4? А по MySQL?

Человек по имени Александр Пирамидин перевел документацию от версии 4.2.1 (зеркало на PHPClub-е). Этот перевод вполне подходит для изучения PHP, но надо помнить, что наиболее точной является документация на оригинальном сайте.

Также частично переведенный мануал можно найти на php.ru.

Не передаются переменные.

Данные в скрипт передаются. Просто, начиная с версии 4.1, РНР перестал автоматически назначать их переменным. За это отвечает параметр register_globals в php.ini. Если он выключен, то получить значение переменной можно, обратившись к массиву, соответствующему способу передачи данных в скрипт.
Например:
Передаем методом GET: script.php?var=value — echo $_GET[‘var’] напечатает «value».
Подробнее об этом можно прочитать здесь: http://www.xpoint.ru/archive/topic8/43/8759.html

Как писать русскими буквам в GD без TrueType?

Вот есть такая страничка http://www.sbnet.ru/soft/gdfonts/pages/index.htm
Там написано, как в gd рисовать по-русски, не дергая truetype при этом.
(c) Гоша

Почему разработчики PHP не рекомендуют использовать его с Apache 2.x?

  1. Apache2 по всем тестам работает процентов на 15-20 медленнее Apache 1.3*. Этот факт давно известен, в том числе и разработчикам Apache. Выигрыш от его использования может быть только на очень больших сайтах и заключается только в меньшем расходе памяти при большой нагрузке (100 процессов httpd жрут памяти больше, чем 100 нитей Apache2). В Apache2, несмотря на то, что разработчики называют его стабильным, довольно часто находят довольно серьезные баги. Это объяснимо, учитывая то, что код Apache2 еще достаточно новый, в отличие от вылизанного временем кода Apache1.3
  1. В PHP полно расширений, при программировании которых не была применена практика безопасного программирования для нитей (thread-safe). Поэтому, даже если ядро языка перестанет быть экспериментальным для Apache2, никто не гарантирует, что любое из расширений не сможет вызвать крах системы.
  1. Наконец, последняя версия Apache2 нисколько не «свежее» последней версии ветки 1.3.

Как средствами GD поместить прозрачный логотип на свою фотографию

Если Вы хотите поместить прозрачное PNG-изображение на другое изображение, необходимо использовать ImageAlphaBlending . Все использующиеся PNG-изображения должны быть сохранены в формате PNG-24 (опция Save for Web в Фотошопе). Например, Вы хотите поместить прозрачный логотип на свою фотографию. Тогда нужно сделать так:

Как прочитать скриптом данные, посланные методом POST напрямую?

  1. Размер блока пришедших данных содержится в переменной окружения CONTENT_LENGTH и читается из $_ENV[«CONTENT_LENGTH»] или getenv(«CONTENT_LENGTH») .
  1. Если PHP установлен как CGI и ваша программа работает из командной строки (в консольном режиме), данные можно читать из стандартного потока ввода stdin, как из обычного файла. Для этого достаточно открыть этот поток как файл:
  1. Если PHP установлен как модуль, данные можно получить из глобальной переменной $HTTP_RAW_POST_DATA (она же $GLOBALS[‘HTTP_RAW_POST_DATA’] ). Для этого необходимо в файле php.ini раскомментировать/добавить следующую строчку:

Или добавить в файл .htaccess:

Однако это все равно не сработает, если запрос был отправлен с enctype=»multipart/form-data» (устанавливается при загрузке файлов).

Как сделать красивую превьюшку средствами GD

Для этого рекомендутся воспользоваться функциями imagecreatetruecolor (для создания новой «правильноцветной» картинки и функцией imagecopyresampled (для создания уменьшенной копии исходной картинки).

Как форсировать кеширование динамически выдаваемых картинок?

Функция mail слишком долго отправляет письма. Как можно ускорить процесс отправки?

Отправлять письма не в рамках выполнения основного скрипта, а посредством создания еще одного процесса, выполняемого в фоновом режиме.

XSLT-преобразования в PHP. Sablotron error on line 1: XML parser error 4: not well-formed (invalid token)

Несмотря на то, что написано в документации, реально в качестве аргументов xslt_process надо передавать не имена файлов, а их содержимое:

Исследования же Михаила Кюршина выявили, что xslt_process принимает адреса файлов. Нужен именно адрес (URL), а не путь на диске. К примеру, file:///C:/xxx/ooo.xml — это адрес, а C:/xxx/ooo.xml — это путь на диске.

Как проверить, полностью ли докачался файл у пользователя (то есть, не отменил ли он загрузку на середине или вдруг у него инет вырубило)?

Средствами php это невозможно. Если вам это действительно нужно, почитайте, например, как Иван Сагалаев решал похожую задачу на языке python.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL