1

完成PHP 和 HTML 的新手,所以这可能是一个男生错误。我正在尝试为我的工作建立一个小型 Intranet 站点。我希望能够显示本地文件的链接,例如公司手册、程序等。我的主要问题是它需要对 PC 和 MAC 用户友好(Mac 用户主要使用 Firefox,PC 使用 IE)。我有一个 PHP 脚本在我可以为 Mac 或 PC 单独工作但无法同时工作的每个页面上。例如,我希望我的代码查找用户操作系统并运行与显示该操作系统的本地文件链接相关的脚本部分。我相信脚本的关键部分是“文件///”如果它是“文件///”,它可以在 IE 和 Firefox 的 PC 上运行,但它需要是“文件”(没有三个 /' s) 在 Mac 上工作?但我在这个类比中可能是错的。当前代码如下;

<?php

//determine OS of user MAC or PC
$user_agent = getenv("HTTP_USER_AGENT"); 
if (strpos($user_agent, "Win") !== FALSE) 
$os = "Windows"; 
else if((strpos($user_agent, "Mac") !== FALSE) || (strpos($user_agent, "PPC") !== FALSE))
$os = "Mac";

if ($os == "Windows") 
{
//path to S:\One reality\Personnel\Culture & Values
$uncpath = "//servername/shared/one reality/personnel/culture & values/";

//get all files with a .pdf extension.
$files = glob($uncpath . "*.pdf");

//print each file name
foreach ($files as $file)

{
    echo "<a target=_blank href='file:///$file'>".preg_replace("/\\.[^.\\s]{3,4}$/", "",basename($file))."</a><br><br>"; 
}
}
elseif ($os == "Mac")
{
//path to S:\One reality\Personnel\Culture & Values
$uncpath = "//servername/shared/one reality/personnel/culture & values/";

//get all files with a .pdf extension.
$files = glob($uncpath . "*.pdf");

//print each file name
foreach ($files as $file)
{
    echo "<a target=_blank href='file:$file'>".preg_replace("/\\.[^.\\s]{3,4}$/", "",basename($file))."</a><br><br>"; 
}
}

?>

上面的代码在 PC 上运行良好,并以 pdf 格式打开一个新的 TAB,但在 Mac 上,没有三个斜杠,代码无法运行 Mac 特定的“文件:”,因此不知道如何显示本地文件链接。PS 我知道在 Firefox 中允许本地文件链接,并且已经到位,所以它基本上是一个编码问题。我怀疑我的 IF $os = 语句有问题。

如果您认为我走错了路,我已经准备好放弃这种方法并重新开始。

4

1 回答 1

1

对于检测操作系统,您可以在 php 中使用“用户代理”...如果您愿意,您可以阅读本文,使用脚本检测操作系统、浏览器、用户代理中的所有详细信息...

对于您在“else”中的问题,您是否尝试在“else”部分中创建日志?

elseif ($os == "Mac")
{
    print_r("mac os was found");
    // your code
}

对于您的代码,if/else 不是很重要,您可以这样做:

<?php
    // First step: you detect OS plateform : 

    //determine OS of user MAC or PC and add "pathOsFile" var:
    $user_agent = getenv("HTTP_USER_AGENT"); 
    if (strpos($user_agent, "Win") !== FALSE){
        $os = "Windows"; 
        $pathOsFile = "file:///";
    }else if((strpos($user_agent, "Mac") !== FALSE) || (strpos($user_agent, "PPC") !== FALSE)){
        $os = "Mac";
        $pathOsFile = "file:":
    }

    // Second step: You display all your file...

    //path to S:\One reality\Personnel\Culture & Values
    $uncpath = "//servername/shared/one reality/personnel/culture & values/";

    //get all files with a .pdf extension.
    $files = glob($uncpath . "*.pdf");

    //print each file name
    foreach ($files as $file)
    {
        echo "<a target=_blank href='".$pathOsFile.$file."'>".preg_replace("/\\.[^.\\s]{3,4}$/", "",basename($file))."</a><br><br>"; 
    }
?>
于 2012-08-03T09:05:19.010 回答