我最近在WAMP本地服务器上使用代码点火器构建了我的站点,并在共享托管服务器(来自Namecheap)上对其进行了测试。然后我得到了VPS主机方案(来自iPage)并上传了文件并做了必要的配置。但是,当我尝试访问该网站时出现此错误:
遇到未捕获的异常
输入:错误
消息:调用未定义的函数ctype_digit()
文件名:/home/eastngco/public_html/system/core/Security.php
行号:600
问题是,可疑文件Security.php是一个代码点火器系统文件,我从未搞砸过(我写的所有内容都在应用程序文件夹中)。下面是Security.php中围绕该行的代码片段,导致错误:
/**
* Get random bytes
*
* @param int $length Output length
* @return string
*/
public function get_random_bytes($length)
{
if (empty($length) OR ! ctype_digit((string) $length))
{
return FALSE;
}
if (function_exists('random_bytes'))
{
try
{
// The cast is required to avoid TypeError
return random_bytes((int) $length);
}
catch (Exception $e)
{
// If random_bytes() can't do the job, we can't either ...
// There's no point in using fallbacks.
log_message('error', $e->getMessage());
return FALSE;
}
}
// Unfortunately, none of the following PRNGs is guaranteed to exist ...
if (defined('MCRYPT_DEV_URANDOM') && ($output = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM)) !== FALSE)
{
return $output;
}
if (is_readable('/dev/urandom') && ($fp = fopen('/dev/urandom', 'rb')) !== FALSE)
{
// Try not to waste entropy ...
is_php('5.4') && stream_set_chunk_size($fp, $length);
$output = fread($fp, $length);
fclose($fp);
if ($output !== FALSE)
{
return $output;
}
}
if (function_exists('openssl_random_pseudo_bytes'))
{
return openssl_random_pseudo_bytes($length);
}
return FALSE;
}
我不知道随机字节或ctype_digit()是什么意思!
我在网上做了一些挖掘,看看是否会出现类似的问题(及其解决方案),但没有做到。我需要帮助解决这个问题。 如果它意味着什么,我的托管计划附带的PHP版本是版本7,我有SSL。
答案 0 :(得分:0)
您的提供商可能已明确禁用了这些类型的功能。默认情况下应该启用。尝试联系您的提供商以获得一些支持,以启用这些,或者在没有关闭该标志的情况下重新安装PHP。
http://us2.php.net/manual/en/ctype.installation.php
此外,您可以尝试检查phpinfo()
页面以确认是否启用了ctypes。他们会将其关闭似乎很奇怪,所以这有助于弄清楚这是否是问题的一部分。
答案 1 :(得分:0)
Ipage 有一个支持页面来启用 ctype 扩展,请阅读这篇文章,使用代码点火器和 PHP:7.4.10,我收到此错误消息:调用未定义的函数 ctype_digit()。 在 Ipage 中启用此扩展在我的情况下问题已解决。 文章: https://www.ipage.com/help/article/how-to-enable-ctype-so-extensions-in-php-ini