0

サーバー情報を取得するために次の関数を使用しています。

function srv_name(){
if ($_SERVER['SERVER_PORT'] != 80) {
    $port = ':'.$_SERVER['SERVER_PORT'];
} else {
    $port = '';
}
$name = $_SERVER['SERVER_NAME'];
if (isset($_SERVER['HTTPS'])) {
    $http = 'https://';
} else {
    $http = 'http://';
}
return $http.$name.$port;
}

これを次のように使用します。

<link type="text/css" rel="stylesheet" href="<?php echo srv_name(); ?>/css/styles.css">

これは、php ファイルが Web サーバーのルート ディレクトリ (例: mydomain.com/index.php) にある場合に機能しますが、ファイルがサブ ディレクトリ (例: mydomain.com/mydir/index.php) にある場合は機能しません。

サブディレクトリを取得するには、関数に何を追加する必要がありますか?

4

3 に答える 3

3

追加できdirname($_SERVER['SCRIPT_NAME'])ます:

// ...
return $http . $name . $port . dirname($_SERVER['SCRIPT_NAME']);
于 2012-09-03T15:49:35.523 に答える
2

テンプレート ファイルと css ディレクトリが同じディレクトリにある場合

mydomain.com/templates/mytemplate/index.php --> template
mydomain.com/templates/mytemplate/css/styles.css --> stylesheet in css direcory

次に使用します

<link type="text/css" rel="stylesheet" href="css/styles.css">
于 2012-09-03T15:50:22.463 に答える
0

以下のコードのようなものを使用して、後でphpの電子メールメッセージクラスの出力として使用するファイルのパスを取得しています。

                 //To this folder I'm uploading in another module

$folder='uploads/';


        //get the server address.. it's a vpn accessible ip in our case 
        $dev_baseurl= 'http://192.168.xxx.xyz'; 

//この場合に機能した関数*(さらに良い方法がある場合は、コメントを追加してください)

                    function check_address($current_dir,$https_check)
                    {
//$https_check, user defined var for
$conflen=strlen($current_dir);
//im using this and don't ask me why :P
$conflen1=0;

$B=substr(__FILE__,0,strrpos(__FILE__,'/'));
$A=substr($_SERVER['DOCUMENT_ROOT'], strrpos($_SERVER['DOCUMENT_ROOT'], $_SERVER['PHP_SELF']));
$C=substr($B,strlen($A));

$posconf=strlen($C)-$conflen1-1;
$D=substr($C,1,$posconf);

if (isset($_SERVER['HTTPS'])) $https_check=1;

switch($https_check)
{
case 0:
            $host='http://'.$_SERVER['SERVER_NAME'].'/' .$D.'';
break;

case 1:
            $host='https://'.$_SERVER['SERVER_NAME'].'/'.$D.'';
break;
}
//output the address
return $host;


 }

リモートでホストされているファイルへのパスを取得しようとしています

$dev2_url=check_address('/',1);

$dev2_url="{$dev2_url}";

/* That should be the output we are looking for 
   $dev_url="{$dev_baseurl}".str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname($_SERVER['SCRIPT_FILENAME']))."/{$folder}";
*/ 

...私のphpの他のロジック

     //$body is a message string that we are sending with a class call as a parameter later
    foreach( $_POST['attachments'] as $a => $avalue)
{
    if (is_file($avalue))
     {  

      $mime_type[$a] = substr(strrchr($avalue, '.'), 1);


    $handle=fopen($avalue, 'rb');
                                      $bs_name=basename($avalue);
                                      $filesize=filesize($avalue);
                                      $f_contents=fread($handle, $filesize);
                                      fclose($handle);

// get_mime_type2はファイルからファイルタイプをチェックしますが、この例には関係ありませんが、出力についてはチェックしますif(isset($ mime_type [$ a]))$ mime_type [$ a] = get_mime_type2($ mime_type [$ a ]);

                        $body.= '<li><ul><li>Filename:&nbsp;' . $bs_name .$eol;
                        $body.= '<li>FileType:&nbsp;'.$mime_type[$a].$eol;

                                            //In this line I use the calculated path to pass it as an output to an HTML based version of an email
                                            $body.= "<li>Path:&nbsp;<a href=\"{$dev2_url}/{$avalue}\" title=\"Open w/ browser {FileName: $bs_name} | Size: {$filesize}\" target=\"_parent\">"  .$avalue . "</a><li>Approx.File-Size:{$filesize} bytes</ul>";


                                    }
    }  
$body.='</ul>';     

したがって、この行に注意してください:..。

$body.= "<li>Path:&nbsp;<a href=\"{$dev2_url}/{$avalue}\" title=\"Open w/ browser {FileName: $bs_name} | Size: {$filesize}\" target=\"_parent\">"  .$avalue . "</a><li>Approx.File-Size:{$filesize} bytes</ul>";    

.. $ dev2_urlはファイルへのパスを見つけるために使用されており、ファイル名を追加します。これで処理されます。運用に必要なことを達成するためのより洗練された方法があるはずですが、それを使用できる実際のシナリオがなければ、自分の実装を共有することしかできません。

それは私に使用するのに便利な出力を与えます..IE:

//http://192.168.xx.xyZ is actually a real IP address

http://192.168.xx.xyZ/ProjectX/protos/jquery-menu2/includes/uploads/t_1.txt

電子メールメッセージに添付されている各ファイルの出力用

于 2012-11-11T06:39:19.517 に答える