PHP Exe输出 - 无法访问数据库

时间:2016-06-30 03:23:28

标签: php mysql wamp exe server2go

好的,所以我试图将我的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 "";
}
?>

3 个答案:

答案 0 :(得分:4)

在您的PC上使用

localhost表示您的PC

localhost在您的朋友PC上使用时,意味着您的朋友PC 没有MYSQL服务器或您的数据库

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

  

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

然后将路由器中的前向端口3306移植到运行MYSQL的PC上的端口3306。

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

或者创建一个MYSQL accout,可以在任何IP ADDRESS中使用,但也只允许访问这个数据库。

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

在windows / system32 / drivers / etc / hosts add

中创建主机本地主机

127.0.0.1 localhost :: 1 localhost