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

时间:2016-03-10 23:09:39

标签: php apache ini

在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();

3 个答案:

答案 0 :(得分:0)

php.ini的位置取决于您拥有的托管帐户的类型。据GoDaddy说:

enter image description here

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

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

<?php phpinfo(); ?>

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

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

答案 1 :(得分:0)

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

  1. 如果你是一个Windows用户启动一个新的空白记事本文件写一些东西 并'保存为'php.ini

  2. 如果你是一个mac用户,启动文本编辑写一些东西转到“格式”菜单然后选择“make plain text”然后保存为'php.ini

  3. 典型内容如下所示:

    display_errors = Off 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();
    

答案 2 :(得分:0)

这听起来像是你得到了#34;致命错误:调用未定义的方法mysqli_stmt :: get_result()&#34;

如果是这样,你必须确保你确实拥有&#34; mysqlnd &#34;的启用下, 通过构建php信息页面enter link description here来了解这一点的最简单方法应该是:enter image description here

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

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