0

我在dreamhost中重新登录到我的服务器并测试了一些脚本。我发现我无法使用str_split. 给出了未定义函数的消息。我检查了服务器中的版本,它的 PHP 版本是 5.2.12。我只是想知道需要哪个版本?谢谢。

测试代码:

<?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 解析,这就是为什么我通过在 webroot 中放置一个 phpinfo.php 得到 php 5.2.12。如果php文件直接使用php test.php在命令行中运行,另一个php版本是4.x工作。这就是我出错的原因。当我使用

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

一切安好。

4

7 回答 7

2

与使用相比str_split,直接遍历字符串的字符通常要容易得多:

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

看?

于 2010-03-21T07:08:43.600 回答
2

根据 dreamhost wiki,如果您在 2008 年 9 月之前创建了域,则需要从控制面板手动切换到 php5。

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

自 2005 年 6 月起,DreamHost 将 PHP 5 添加到所有计划中。自 2008 年 9 月起,停止对 PHP4 的支持,因此您不能再从面板中从 PHP 5 切换回 PHP 4。

如果您还没有切换到 PHP 5,您可以在控制面板中执行此操作。但是,在切换到 PHP 5 之后,您将无法再切换回 PHP 4。

以下是从 PHP 4 切换到 PHP 5 的方法:

  1. 登录 DreamHost 控制面板。
  2. 单击域,然后单击管理域。
  3. 单击要在其上激活 PHP 5 的域旁边的扳手图标(在 Web Hosting 列下)。
  4. 从下拉菜单中选择 PHP 5.xx。
  5. 单击立即更改完全托管的设置!在该部分的底部。
  6. 对要激活的每个其他域重复步骤 3-5。

你也可以检查你的php版本

<?php  
   phpinfo();
?>
于 2010-03-21T07:28:47.693 回答
2

首先:PHP 文档总是会在函数的文档页面上直接在函数名称下说明每个函数所需的版本。

.htaccess 文件可能在您的路径中的某个位置,并导致使用以前版本 (<5) 的 PHP。要双重(或三重)检查以确保您在正确的 PHP 版本中运行,请将此代码放在您调用的行上方str_split

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

但是,如Col. Shrapnel所示,没有必要将字符串转换为单个字符的数组来迭代该字符串的字符。字符串也可以使用传统的迭代方法进行迭代,从而使调用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]." ";
}

这同样,如果不是更清楚的话。

于 2010-03-21T07:29:02.607 回答
1

所需版本为 PHP 5 或更高版本。所以理论上你的程序应该可以工作。

于 2010-03-21T02:03:07.220 回答
1

如果您无法开始str_split工作,只需将字符串用作数组:

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

会产生

d

无论如何,这种方法是最快的。我不知道它是否适合您的需求,但如果可以,我希望它对您有所帮助!

于 2010-03-21T05:30:25.593 回答
0

可以是您代码中的任何内容。我们怎么知道它不是 10 行脚本或 2000 行脚本?

于 2010-03-21T02:05:53.080 回答
0

您可以使用 preg_split() 将数组拆分为单个字符,但它会在开头和结尾返回一个额外的空字符串。

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

印刷:

["","a","b","c","d","e","f","g",""]
于 2013-10-01T09:23:54.690 回答