繁体   English   中英

如何为 GoDaddy 共享主机创建 php.ini 文件?

[英]How do I create a php.ini file for GoDaddy shared hosting?

在 PHP 中运行某个方法时出现错误。 我查看了它,似乎我需要mysqlnd驱动程序。 我知道我必须在 php.ini 文件中进行配置,但由于我已与 GoDaddy 共享主机,因此我无权访问 ini 文件。 我打电话给 GoDaddy,他们基本上说,你必须创建自己的。 我的问题是,ini 文件放在我的情况下在哪里? 我需要创建一个php.ini文件还是一个php5.ini 另外,我将如何在文件中写入设置,我从未使用过 ini 文件,我真的不知道它的外观。

DB_Functions.php 代码:

<?php

class DB_Functions {

    private $con;

    function __construct() {
        require_once 'DB_Connect.php';

        $db = new DB_Connect();
        $this->con = $db->connect();
    }

    function __destruct() {

    }

    public function storeUser($name, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash['encrypted'];
        $salt = $hash['salt'];

        $stmt = $this->con->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES(?, ?, ?, ?, ?, NOW())");
        $stmt->bind_param('sssss', $uuid, $name, $email, $encrypted_password, $salt);
        $result = $stmt->execute();
        $stmt->close();

        if ($result) {
            $stmt = $this->con->prepare("SELECT * FROM users WHERE email = ?");
            $stmt->bind_param('s', $email);
            $stmt->execute();
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();

            return $user;
        } else {
            return false;
        }
    }

    public function getUserByEmailAndPassword($email, $password) {
        $stmt = $this->con->prepare("SELECT * FROM users WHERE email = ?");

        $stmt->bind_param('s', $email);

        if ($stmt->execute()) {
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();

            $salt = $user['salt'];
            $encrypted_password = $user['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);

            if ($encrypted_password == $hash) {
                return $user;
            }
        } else {
            return NULL;
        }
    }

    public function getUserByNameAndPassword($name, $password) {
        $stmt = $this->con->prepare("SELECT * FROM users WHERE name = ?");

        $stmt->bind_param('s', $name);

        if ($stmt->execute()) {
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();

            $salt = $user['salt'];
            $encrypted_password = $user['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);

            if ($encrypted_password == $hash) {
                return $user;
            }
        } else {
            return NULL;
        }
    }

    public function doesUserEmailExist($email) {
        $stmt = $this->con->prepare("SELECT email FROM users WHERE email = ?");

        $stmt->bind_param('s', $email);

        $stmt->execute();

        $stmt->store_result();

        if ($stmt->num_rows > 0) {
            $stmt->close();
            return true;
        } else {
            $stmt->close();
            return false;
        }
    }

    public function doesUserNameExist($name) {
        $stmt = $this->con->prepare("SELECT name FROM users WHERE name = ?");

        $stmt->bind_param('s', $name);

        $stmt->execute();

        $stmt->store_result();

        if ($stmt->num_rows > 0) {
            $stmt->close();
            return true;
        } else {
            $stmt->close();
            return false;
        }
    }

    public function hashSSHA($password) {
        $salt = sha1(rand());
        $salt = substr($salt, 0, 10);
        $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
        $hash = array('salt' => $salt, 'encrypted' => $encrypted);
        return $hash;
    }

    public function checkhashSSHA($salt, $password) {
        $hash = base64_encode(sha1($password . $salt, true) . $salt);

        return $hash;
    }

}

?>

我在使用相同代码的两行上遇到错误。

$user = $stmt->get_result()->fetch_assoc();

php.ini的位置取决于您拥有的主机帐户的类型。 根据 GoDaddy 的说法:

在此处输入图片说明

有关更多详细信息,请参阅https://www.godaddy.com/help/what-filename-does-my-php-initialization-file-need-to-use-8913

但是,如果mysqlnd尚未由 GoDaddy 编译和安装,则您很可能无法通过本地php.ini文件解决任何问题。 您可以通过创建一个包含以下内容的小型 PHP 文件(例如test.php )来查看安装了哪些模块:

<?php phpinfo(); ?>

把它放在你的 HTML docroot 中,在你的浏览器中加载文件的 URL,它会告诉你有哪些 PHP 模块可用。

如果mysqlnd实际上可用,则可以使用本地php.ini文件配置一些(不是很多)选项。 见这里: http : //php.net/manual/en/mysqlnd.config.php

您可以像这样创建 php.ini 文件:

  1. 如果您是 Windows 用户,请启动一个新的空白记事本文件,然后“另存为”php.ini

  2. 如果你是一个 mac 用户,启动文本编辑写一些东西去“格式”菜单然后选择“制作纯文本”然后另存为“php.ini”

典型的内容如下所示:

display_errors = 关闭 error_reporting = 0

在您的情况下,您可能需要根据确切的错误消息设置路径。 你得到的错误信息是什么?

mysql.default_socket="/your/path/to/mysql.sock"

保存更改并上传到您的网站根目录,例如 public_html

代替:

$user = $stmt->get_result()->fetch_assoc();

和:

$stmt->bind_result();
$user = $stmt->fetch();

听起来您收到“致命错误:调用未定义的方法 mysqli_stmt::get_result()”

如果是这样,您必须确保您确实启用了“ mysqlnd ”,最简单的方法是通过构建一个 php 信息页面来了解,在此处输入链接描述应该是这样的:在此处输入图像描述

来自 Godaddy Cpanel,请确保您使用的是最新的 php 版本。 从那里“php Extensions”确保启用“-mysqlnd & -nd_mysql & -nd_mysqli & -nd_pdo_mysql”

这样你就可以摆脱致命错误,你的脚本应该可以正常工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM