W3docs

octdec()

Функция PHP octdec(): синтаксис, возвращаемое значение, примеры с правами доступа к файлам и подводные камни.

Функция octdec() преобразует восьмеричное (base-8) число, переданное в виде строки, в его десятичный (base-10) эквивалент. На этой странице рассматриваются синтаксис, возвращаемое значение, наиболее распространённое применение (права доступа к файлам в Unix) и типичные ошибки.

Что такое функция octdec()?

octdec() — это встроенная функция PHP, которая принимает восьмеричное число, записанное в виде строки, и возвращает соответствующее целое число в десятичном представлении.

Краткое напоминание о системах счисления:

  • Восьмеричная (base-8) использует только цифры 07. Каждая позиция является степенью числа 8.
  • Десятичная (base-10) — привычная нам система, использующая цифры 09.

Например, восьмеричная строка "17" означает 1 × 8 + 7 × 1 = 15 в десятичной записи. octdec() выполняет это вычисление за вас, избавляя от необходимости вручную считать степени числа 8.

Она является обратной по отношению к decoct(), которая преобразует десятичное число обратно в восьмеричную строку.

Синтаксис

octdec(string $octal_string): int|float
  • $octal_string — восьмеричное значение для преобразования, в виде строки (например "755").
  • Возвращаемое значение — десятичный эквивалент. Результат имеет тип int, но PHP автоматически возвращает float, если число слишком велико для хранения в целочисленном типе платформы.

Как использовать функцию octdec()

Передайте восьмеричное значение в виде строки, и octdec() вернёт десятичное число:

php— editable, runs on the server

Здесь восьмеричная строка "10" равна 1 × 8 + 0 = 8 в десятичном представлении, поэтому скрипт выведет 8. Обратите внимание: восьмеричное "10" — это не десять, а восемь, потому что в base-8 нет цифр 8 и 9.

Преобразование нескольких значений

Сравнение нескольких преобразований рядом позволяет лучше понять паттерн base-8:

<?php
echo octdec("7"),   "\n"; // 7   (7 × 1)
echo octdec("10"),  "\n"; // 8   (1 × 8 + 0)
echo octdec("17"),  "\n"; // 15  (1 × 8 + 7)
echo octdec("100"), "\n"; // 64  (1 × 64)
echo octdec("777"), "\n"; // 511 (7 × 64 + 7 × 8 + 7)
?>

Применение на практике: права доступа к файлам

Самая распространённая причина использовать octdec() — права доступа к файлам в Unix. Такие функции, как chmod(), ожидают целое число, но права доступа почти всегда записываются и обсуждаются в восьмеричном формате (755, 644 и т. д.). Передача строки с правами напрямую приводит к скрытой ошибке, поэтому сначала нужно выполнить преобразование:

<?php
$octalPermission = "755";

// Convert the octal permission string to the integer chmod() needs
$mode = octdec($octalPermission);

echo "Octal 755 = decimal {$mode}\n"; // Octal 755 = decimal 493

// chmod("script.sh", $mode); // applies rwxr-xr-x
?>

Этот код выведет Octal 755 = decimal 493. Распространённая ошибка — вызов chmod("file", 755) с обычным десятичным литералом, что устанавливает неверные биты прав доступа. Используйте либо восьмеричный литерал 0755, либо получайте значение через octdec("755").

На что обратить внимание

Внимание

octdec() молча игнорирует любой символ, не являющийся допустимой восьмеричной цифрой (07). Так, octdec("90") не вызывает ошибку — она отбрасывает недопустимую 9, остаётся 0, и возвращается 0. Проверяйте входные данные перед преобразованием, если они могут содержать некорректные символы.

Ещё несколько моментов, о которых следует помнить:

  • На входе должны быть только восьмеричные цифры. Цифры 8 и 9 недопустимы в base-8 и отбрасываются.
  • Передавайте строку, а не литерал. При записи octdec(017) PHP сначала интерпретирует 017 как восьмеричный литерал (десятичное 15), а затем снова выполняет преобразование — что редко является желаемым результатом. Используйте octdec("17").
  • Большие значения возвращаются как float. Очень длинные восьмеричные строки превышают PHP_INT_MAX, поэтому octdec() возвращает число с плавающей точкой вместо целого числа.

Связанные функции

  • decoct() — обратная функция: из десятичного в восьмеричное.
  • hexdec() / dechex() — преобразование между шестнадцатеричной и десятичной системами.
  • bindec() / decbin() — преобразование между двоичной и десятичной системами.
  • intval() — разбор строки в целое число с произвольным основанием (intval($str, 8) — ещё один способ прочитать восьмеричное число).

Заключение

Функция octdec() преобразует восьмеричную строку в десятичное целое число, что необходимо при работе с правами доступа к файлам или любыми данными в base-8 в PHP. Помните: передавайте значение в виде строки, проверяйте входные данные на наличие недопустимых символов и используйте decoct() для преобразования в обратном направлении.

Практика

Практика
Какова цель функции PHP octdec()?
Какова цель функции PHP octdec()?
Was this page helpful?