1

PHPとHTMLの初心者を完全にするので、これは男子生徒のエラーである可能性があります。私は自分の仕事のために小さなイントラネットサイトをセットアップしようとしています。ローカルファイルへのリンクを表示できるようにしたい(例:Comapnyハンドブック、手順など)。私の主な問題は、PCとMACの両方のユーザーフレンドリーである必要があることです(Macユーザーは主にFirefoxを使用し、PCはIEを使用します)。PHPスクリプトがあります。 MacまたはPCで個別に動作させることはできますが、同時に動作させることはできません。たとえば、コードでユーザーのOSを検索し、そのOSのローカルファイルリンクの表示に関連するスクリプトの一部を実行したいとします。スクリプトの重要な部分は「file///」だと思います。「file///」の場合、IEとFirefoxのPCで動作しますが、「File」(3つなし)である必要があります。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で正常に実行され、新しいTABをpdfとして開きますが、Macでは、コードは3つのスラッシュなしでMac固有の「ファイル:」を実行することはできず、その結果、ローカルファイルリンク。PS Firefoxでローカルファイルリンクを許可することを知っていますが、それは適切に行われているため、基本的にコーディングの問題です。IF $os=ステートメント内で何か問題があるのではないかと思います。

私が間違ったルートをたどったと思われる場合は、このアプローチを破棄してやり直す準備ができています。

4

1 に答える 1

1

OSを検出するには、phpで「ユーザーエージェント」を使用できます...必要に応じて、この記事を読むことができます。スクリプトは、OS、ブラウザ、ユーザーエージェントのすべての詳細を検出します。

「else」の問題について、「else」の部分にログを作成しようとしましたか?

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

コードの場合、/ 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 に答える