PHP 4: ключевые характеристики для понимания наследия

Раздел: PHP -> Версии PHP

Введение в 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)

В PHP 4 нет переопределения методов с поздним связыванием, также нет конструкторов __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 ограничена, нет встроенных фильтров (появились в 5.2). Рекомендуется самодельная проверка или использование PEAR.

Расширенные примеры кода в 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();
?>
(браузер перенаправляется)
Вывод пробелов или HTML до header() вызывает ошибку "headers already sent". Решение - буферизация или проверка кода.

PHP 4 - comments

En
язык php 4 (php)