2011-10-18 41 views
0

我正在开发一个项目,该项目将使用户能够从网页启动工具。该页面是使用php设计的。我在我的电脑上安装了WAMP服务器,我可以单击按钮在C驱动器上创建和写入新的批处理文件,并在用户在页面上选择它们时启动从数据库中启动的应用程序路径。 现在,当我在我的电脑上的WAMP服务器上进行操作时,它就可以工作。我必须将脚本上传到托管在同一局域网上的工作中的服务器。唯一的问题是我似乎无法创建或写入用户PC上的文件。如何使用php从服务器映射到本地pc上

从我的理解,它不是映射当前PC的驱动器。这是我在电脑上所做的。

$file_path="C\\test.bat" 
function runApp($file_path, $appPath){ 
    $bat_file = fopen($file_path, "w"); 
    fwrite($bat_file, "start ".$appPath." \n"); 
    fwrite($bat_file, "echo exit \n"); 
    fclose($bat_file); //close file after updating batch file 
} 

,以使其在工作时服务器的工作,我想

$ip=$_SERVER['REMOTE_ADDR']; 
$file_path="user:[email protected]".$ip."\\F:\\test.bat"; 

但它仍然没有工作。我错过了什么?任何帮助将不胜感激

或请让我知道如果我可以启动一个批处理文件或任何文件形成PHP网站

+0

PHP是服务器端,所以任何你在PHP做会发生在服务器上。您无法在客户端PC上使用它启动文件。看看Javascript或桌面应用程序。 –

+0

你究竟在做什么?无论如何,它似乎不适合客户端(Web)服务器应用程序。 – deceze

+0

这是它应该如何工作,并在wamp服务器上工作。用户在线登录其帐户 - >从要启动的应用程序列表中进行选择 - >数据库更新请求,并在F驱动器(与服务器位于同一域上)中为应用程序写入文件将被启动 - >在那之后,你所要做的就是点击启动并启动批处理文件。当我在我的计算机上执行该操作时,问题再次出现,但是一旦在实际的主机服务器上它似乎没有写入文件。我明白PHP只是服务器端,只是想知道它为什么在wamp上工作? – blackStar

回答

0

我假设大家都知道,你不能真正执行任何其他方式客户端PC上的批处理文件来自服务器上的PHP脚本(至少不是单独使用PHP),所以我不会解释这一点。

我还假设你正在处理所有的Windows机器 - 这似乎来自代码示例和问题的上下文。


您在这里找的是处理SMB协议的函数。有一对夫妇的方式来处理这个问题:

  • 很多的时间,你可以简单地使用UNC(如你似乎试图上面做的)。正确的语法是\\servername\sharename\file.ext。我遇到了一些人,声称你可以用username:[email protected](和一个声称你可以用@username:password作为后缀,这肯定是错误的)加前缀,但是我不能上班。因此,如果您想使用此方法来完成这项工作,我建议您将PHP作为具有AD权限的用户运行,以在客户端计算机上读取/写入相关共享,因此不需要额外的身份验证。

  • 还有this class我一直想要尝试一段时间,它为PHP提供了一个smb://流封装器。我对此没有任何经验,但从外观上看,您应该能够使用标准URL语法来访问该文件(即smb://user:[email protected]/servername/sharename/file.ext)。

  • 您可以映射网络驱动器,以便它可以像任何其他驱动器号一样使用。这是我成功用来访问需要PHP身份验证的SMB共享的唯一方法。这种方法存在缺点,因为它增加了另一层复杂性 - 因为您临时映射驱动器号,所以您必须确保多个并发实例使用不同的驱动器号。

的基本程序会去是这样的:

// Set the parameters 
$serverNameOrIp = $_SERVER['REMOTE_ADDR']; 
$shareName = 'f'; 
$fileName = 'test.bat'; 
$userName = 'Dave'; 
$password = 'Random'; 
$driveLetter = 'Z'; // You have to make sure there are no clashes with this! 

// Map the drive 
exec("net use {$driveLetter}: \\\\{$serverNameOrIp}\\{$shareName} {$password} /user:{$userName} /persistent:no"); 

// Do your thang... for example 
file_put_contents("{$driveLetter}:\\$fileName",$batchFileData); 

// Un-map the drive to avoid conflicts with later instances 
exec("net use {$driveLetter}: \\\\{$serverNameOrIp}\\{$shareName} /delete"); 
+0

谢谢。我会尝试。我真的希望它有效 – blackStar

相关问题