PHP 4: ключевые характеристики для понимания наследия
Введение в PHP 4
Версия PHP 4, выпущенная в 2000 году, принесла движок Zend Engine, улучшенную производительность и базовую поддержку объектно-ориентированного программирования. Несмотря на устаревание, знание PHP 4 помогает понимать эволюцию языка и причины изменений в современных версиях.
Как выполнить подключение к MySQL и получить данные в PHP 4?
Основной способ взаимодействия с MySQL в PHP 4 - использование функций mysql_*. Ниже приведён типичный пример запроса к базе данных.
<?
$link = mysql_connect('localhost', 'user', 'password');
if (!$link) {
die('Ошибка подключения: ' . mysql_error());
}
mysql_select_db('test_db', $link);
$result = mysql_query('SELECT id, name FROM users', $link);
while ($row = mysql_fetch_assoc($result)) {
echo 'ID: ' . $row['id'] . ', Имя: ' . $row['name'] . "<br>";
}
mysql_free_result($result);
mysql_close($link);
?>язык php 4 (php 4)
ID: 1, Имя: Иван ID: 2, Имя: Мария
Php 7 функции (новые функции php 7)
mysql_* (удалены в PHP 7), отсутствие экранирования (возможны SQL-инъекции). Решение - использование mysql_real_escape_string().Как организовать сессии в PHP 4 с учётом безопасности?
Сессии в PHP 4 управляются функциями session_start(), session_register() и $_SESSION. Вариант с регистрацией глобальных переменных (register_globals) считался небезопасным.
<?
session_start();
$username = 'guest';
session_register('username'); // устаревшая практика
$_SESSION['role'] = 'user';
echo $_SESSION['username'];
?>
Php v 7 (php версия 7)
guest
Php 8 function (функции php 8)
session_register() устарел, при включённом register_globals переменная $username становилась глобальной. Рекомендация - использовать только $_SESSION.Как создать класс и использовать наследование в PHP 4?
PHP 4 поддерживает классы, но методы у объектов вызываются по значению, а не по ссылке. Для передачи объекта по ссылке требуется оператор &.
<?
class Animal {
var $name;
function Animal($name) {
$this->name = $name;
}
function speak() {
echo $this->name . ' издаёт звук';
}
}
class Dog extends Animal {
function speak() {
echo $this->name . ' лает';
}
}
$dog = new Dog('Бобик');
$dog->speak();
?>Php 8 request (особенности обработки запросов в php 8)
Бобик лает
обновление php wordpress (обновление версии php для wordpress)
__construct (используется имя класса). Рефакторинг для совместимости с PHP 5+.Как обработать данные формы (POST) в PHP 4 и избежать ошибок?
Обработка переменных из $_POST или $HTTP_POST_VARS (старое имя). При включённом register_globals значения автоматически становились глобальными.
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = strip_tags($_POST['name']);
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
echo "Имя: $name, Email: $email";
}
?>Php 8.4 windows (php 8.4 на windows)
Имя: Иван, Email: ivan@example.com
Расширенные примеры кода в PHP 4
Рекурсивная функция для обхода дерева
Функция выводит структуру каталогов, используя рекурсию.
<?
function tree($dir, $level = 0) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ($file == '.' || $file == '..') continue;
echo str_repeat('--', $level) . " $file<br>";
if (is_dir("$dir/$file")) {
tree("$dir/$file", $level + 1);
}
}
closedir($dh);
}
}
tree('/tmp');
?>-- tmp ---- test.txt ---- subdir ------ data.log
Класс для работы с файлами (чтение/запись)
Пример класса с методами для чтения и записи текстового файла.
<?
class FileHandler {
var $filename;
function FileHandler($filename) {
$this->filename = $filename;
}
function write($data) {
$fp = fopen($this->filename, 'w');
fwrite($fp, $data);
fclose($fp);
}
function read() {
return file_get_contents($this->filename);
}
}
$fh = new FileHandler('test.txt');
$fh->write('Hello, PHP 4!');
echo $fh->read();
?>Hello, PHP 4!
Передача переменных по ссылке в функции
В PHP 4 можно изменять внешние переменные, передавая их по ссылке.
<?
function addOne(&$num) {
$num++;
}
$value = 10;
addOne($value);
echo $value;
?>11
& в объявлении, функция не изменит исходную переменную. В PHP 4 нет строгих типов.Работа с HTTP-заголовками (перенаправление)
Функция header() должна вызываться до любого вывода.
<?
ob_start(); // буферизация вывода
header('Location: http://example.com/newpage.php');
ob_end_flush();
?>(браузер перенаправляется)
header() вызывает ошибку "headers already sent". Решение - буферизация или проверка кода.