2

好的,所以我正在尝试将我的 php 程序/php 文件转换为 .exe 输出,以便我将文件提供给的任何人都可以运行它,无论他们在哪里。它对我来说完美无缺。但是,当我的朋友在他自己的计算机上运行相同的 .exe 文件时,出现一个错误,说明它无法连接到我的数据库。我希望他无需下载其他软件和东西即可访问该程序。我尝试阅读一些可能的解决方案,发现一些建议我应该将其包含在我的数据库连接代码中。他们还使用 Server2go 使其工作:

<?php
// ExeOutput for PHP: MySQL sample using the WAMP package Server2Go

// By default, Server2go comes with a sample database. Root admin is not password-protected.
$mysqlusername = "root";
$mysqlpass = "";
// Do not modify the following lines
$mysqlport = getenv('S2G_MYSQL_PORT');
$mysqlhost = "localhost:".$mysqlport;

// We verify that our ExeOutput application was started by Server2go, otherwise, the MySQL server may not have started.
if (empty($mysqlport)) die("This application cannot be started directly. Programmers: please use the Server2go EXE file, it will start this application automatically.");

?>    

问题是我不确定如何将它正确地集成到我目前拥有的连接代码中。错误总是指 $conn = mysqli_connect....部分。这是我现有的连接代码。如何集成建议的解决方案?

<?php

    function db_connect()
{
    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "csv_db";

    $conn = mysqli_connect($host, $user, $password, $database);

    if ($conn == FALSE)
    {
        echo "Error: Unable to connect to the database!";
        return NULL;
    }

    return $conn;
} 


function db_disconnect($conn)
{
    mysqli_close($conn);
    return;
}


 function checkUserAccessCookie()
{
    /* Check if the user has the "userAccess" cookie (set during login) */
    if (isset($_COOKIE["userAccess"]))
    {
        return true;
    }

    return false;
}


function getDefaultUserFromCookie()
{
    /* If the user has been here before, then a cookie named "userLogin"
     *  with the user's username will be available. */
    if (isset($_COOKIE["userLogin"]))
    {
        return $_COOKIE["userLogin"];
    }

    /* If the cookie does not exist, then return blank instead */
    return "";
}
?>
4

3 回答 3

4

localhost在您的 PC 上使用时表示您的 PC

localhost在您朋友的 PC 上使用时表示您的朋友 PC没有 MYSQL Server 或您的数据库

您必须在代码中使用路由器的 WAN IP 地址。

这假设您的 ISP 已为您提供静态 IP 地址。如果您的 WAN IP 地址在每次重新启动路由器时发生变化,甚至偶尔在重新启动时发生变化,当这种情况发生时,您的程序在朋友 PC 上运行时将无法找到您的数据库。

然后将路由器中的端口 3306 端口转发到运行 MYSQL 的 PC 上的端口 3306。

我强烈建议您在 MYSQL 中创建一个新用户帐户,该帐户允许从(最安全的)您朋友 PC 的 IP 地址使用,并且只能访问此特定数据库。然后更改代码以使用该用户帐户而不是root完全没有密码,这非常愚蠢,甚至对于城里最新的黑客来说也是主要的攻击媒介

或者创建一个可以从任何 IP 地址使用但也只允许访问这个数据库的 MYSQL 帐户。

确保密码强度高,因为您路由器上的开放端口 3306 很快就会被黑客发现。

于 2016-06-30T08:01:15.747 回答
0

s2g 解决方案通过读取您朋友计算机上可能不存在的环境变量来工作。因此这种方法需要他安装/设置东西。如果你想避免这种情况,最好的方法是在一个文件中实现一点独立的 sql 宇宙,或者至少在你的应用程序中;sqlite 非常适合。

于 2018-10-20T09:48:59.783 回答
-1

在 windows/system32/drivers/etc/hosts 中创建 hosts 本地主机 添加

127.0.0.1 本地主机 ::1 本地主机

于 2016-06-30T08:06:00.913 回答