2017-08-22 6 views
0

まず、私は「新しい」(数ヶ月間だけコーディングしています)PHPにログインし、ログインしたユーザーが表示するファイルを取得しようとしています。ログインしたユーザーのファイルURLを取得して画面に表示

私はbasebandurlを含むいくつかのオプションを試しましたが、私はそれが必要な方法で動作するように見えません。ここで

は、私のコードの抜粋です:

$personCalendar = '/folder\calendars\people'; 
$personFiles = scandir($personCalendars); 

$personID = $_SESSION['Person_ID']; 

$test = preg_grep('/'.personID.'/',$personFiles); 
print_r($test); 

echo basename($test); 

print_rからの出力は偉大である私にArray ([312] => s15399.ics)を与えますが、私はちょうどs15399.ics部品を必要とし、それはページのURLを何かの最後に追加していhttps://servername.com/index.php/calendar?s15399.icsのように、ファイルを受け取り、カレンダーに「購読する」ことができます。

baseband私はそれに驚いていません。

これは可能ですか?そうでない場合は、これを行うにはどのような方法をおすすめしますか?

+0

ベースバンド?私は混乱しています、それはモバイルデバイスのコンテキストでですか?その 'url()'関数を使用していますか?私は次のことを確信していません。あなたが '$ test'要素の値だけを必要とするなら、' reset($ test) 'を使います。 - "最初の配列要素の値を返します。配列が空の場合はFALSEを返します。" – ficuscr

+0

申し訳ありませんが、私は 'url()'関数をテストしていましたが、機能しませんでした。私はそれを取り除いた。 –

答えて

1
// using \ in a file path is not going to work. Use/instead. 
// $personCalendar = '/folder\calendars\people'; 
$personCalendar = '/folder/calendars/people'; 

// scandir will work but it will eventually run into problems 
// if you have lots and lots of files. 
$personFiles = scandir($personCalendars); 


$personID = $_SESSION['Person_ID']; 
function url(){ 
    return sprintf('%s//%s%s', 
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', 
     $_SERVER['SERVER_NAME'], 
     $_SERVER['REQUEST_URI'] 
    ); 
} 
// shouldn't the following be $personID, not personID? 
$test = preg_grep('/'.$personID.'/', $personFiles); 
print_r($test); 
$filename = reset($test); 
if ($filename) { 
    $fullUrl = url() . $filename; 
    echo $fullUrl; 
} else { 
    echo "File not found\n"; 
} 

を使用することができます。ファイル名がperson idと同じ場合は、

$filename = "s{$personID}.ics"; 
if (file_exists($filename)) { 
    // 
} else { 
    // 
} 
+0

ありがとう! URLはうまく表示されます。私は、カレンダーをGoogleのリンクに追加しようとしましたが、あなたが提供したアドレスに有効なicalまたはGData形式のカレンダーが含まれていないというエラーが発生しました。 icsファイルは、ページファイルとは別の場所に格納されます。 また、 'scandir()'よりも何が良いでしょうか?スキャンするファイルが何千もある可能性があります。 –

+0

PHPドキュメントでopendirとreaddirを見てください。 – ryantxr

+0

私はGoogleカレンダーと彼らが受け入れるファイル形式について何も知らない。既存の質問に追加の質問を付けることはできません。 – ryantxr

0

あなたは、ファイルを見つける必要があるし、ファイル名を知っている場合、あなたはすべてのファイルを読む必要はありませんcurrent();

$link=current($test); 
+0

'preg_grep'がそれを返す複数の要素からなる配列を返した場合は?コード内のあいまいさが好きではないので尋ねますが、次に一致するパターンがどちらであるかはわかりません:) – ficuscr

+0

配列内の最初の要素には、next()およびprev()およびlast()もあります。あなたはあなたを助けますか?現在は現在あなたの仕事をしています – Osama

+0

。ポインタで何をしたのか100%ではありませんでした。なぜ私はその場合に 'reset'を好むのですか?しかし、あなたは正しいです。私のために – ficuscr

関連する問題