Какая версия PHP требуется для str_split? - PullRequest
0 голосов
/ 21 марта 2010

Я перехожу на свой сервер в dreamhost и тестирую некоторые скрипты. И обнаружил, что не могу использовать str_split. Было дано сообщение о неопределенной функции. Я проверил версию на сервере, и ее версия PHP - 5.2.12. И мне просто интересно, какая версия требуется? Спасибо.

Testcode:

<?php
$arr = str_split("lsdjflsdjflsdjflsdjfl");
print_r($arr);
?>

Сообщение:

Fatal error: Call to undefined function:  str_split() in /test.php on line 3

Редактировать @ Джастин Джонсон

Я проверил системный каталог сервера и обнаружил, что в Dreamhost есть две версии PHP. В webroot пользователя файл будет анализироваться PHP5, и поэтому я получил php 5.2.12, поместив phpinfo.php в webroot .И если php файлы запускаются в командной строке напрямую, используя php test.php, еще одна версия php, которая работает на 4.x. По этой причине я получаю сообщение об ошибке. Когда я использую

/usr/local/php5/bin/php test.php

Все хорошо.

Ответы [ 7 ]

2 голосов
/ 21 марта 2010

Прежде всего: в документации PHP всегда будет указано, какая версия требуется для каждой функции на странице документации этой функции непосредственно под именем функции.

Возможно, файл .htaccess находится где-то на вашем пути, ивызывает использование предыдущей версии (<5) PHP.Чтобы выполнить двойную (или тройную) проверку, чтобы убедиться, что вы работаете в правильной версии PHP, поместите этот код над строкой, в которой вы вызываете <code>str_split

echo "version:", phpversion(), 
    "<br/>\nstr_split exists? ", 
    function_exists("str_split") ? "true" : "false";

Однако, как показано Col,Шрапнель , нет необходимости преобразовывать строку в массив отдельных символов, чтобы перебирать символы этой строки.Строки также могут быть перебраны с использованием традиционных методов итерации, что делает вызов str_split ненужным и расточительным (если только вам не нужно сегментировать строку на куски фиксированной длины, например: str_split($s, 3))

foreach ( str_split($s) as $c ) { 
    // do something with character $c
}

можно заменить на

$s = "lsdjflsdjflsdjflsdjfl";

for ( $i=0; isset($s[$i]); ++$i ) {
    // do something with character $s[$i]." ";
}

, что в равной степени, если не более понятно.

2 голосов
/ 21 марта 2010

Согласно Dreamhost Wiki, вам нужно переключиться на php5 вручную с панели управления, если вы создали свой домен до 2008 года.

http://wiki.dreamhost.com/Installing_PHP5#Using_DreamHost.27s_PHP_5

PHP 5 был добавленвсе планы DreamHost по состоянию на июнь 2005 года. С сентября 2008 года поддержка PHP4 была прекращена, поэтому вы больше не можете переключаться обратно на PHP 4 с PHP 5 с панели.

Если вы не переключилисьдо PHP 5, вы можете сделать это в панели управления.Но, опять же, вы не сможете переключиться обратно на PHP 4 после перехода на PHP 5.

Вот как перейти с PHP 4 на PHP 5:

  1. Войдите вПанель управления DreamHost.
  2. Нажмите Домены, затем Управление доменами.
  3. Нажмите значок гаечного ключа рядом с доменом, на котором вы хотите активировать PHP 5 (в столбце Веб-хостинг).
  4. Выберите PHP 5.xx из выпадающего меню.
  5. Нажмите кнопку Изменить полностью размещенные настройки сейчас!в нижней части раздела.
  6. Повторите шаги 3-5 для каждого дополнительного домена, который вы хотите активировать.

вы также можете проверить версию php с помощью

<?php  
   phpinfo();
?>
2 голосов
/ 21 марта 2010

Вместо использования str_split, как правило, гораздо проще выполнять итерацию непосредственно по символам строки:

$s="abc";
$i=0;
while(isset($s[$i])) {
    echo $s[$i++]." ";
}

см

1 голос
/ 21 марта 2010

Если вы не можете заставить str_split работать, просто используйте строку в качестве массива:

$stuff = "abcdefghijkl";
echo $stuff[3];

будет производить

d

Этот метод в любом случае самый быстрый. Я не знаю, соответствует ли это вашим потребностям, но если это так, надеюсь, это поможет!

1 голос
/ 21 марта 2010

Требуемая версия - PHP 5 или более поздняя.Так что теоретически ваша программа должна работать.

0 голосов
/ 01 октября 2013

Вы можете использовать preg_split (), чтобы разбить массив на отдельные символы, но он возвратит дополнительную пустую строку в начале и в конце.

$a = preg_split("//","abcdefg");
echo json_encode($a);

печать:

["","a","b","c","d","e","f","g",""]
0 голосов
/ 21 марта 2010

Может быть что-нибудь в вашем коде. Откуда мы знаем, что это не сценарий из 10 строк или сценарий из 2000 строк?

...