Php 获取登录用户的文件url并显示在屏幕上

Php 获取登录用户的文件url并显示在屏幕上,php,Php,首先,我是PHP的“新手”(只编写了几个月的代码),正在尝试获取一个文件供登录用户显示 我尝试了一些选项,包括基带和url,但它似乎没有按我需要的方式工作 以下是我的代码片段: $personCalendar = '/folder\calendars\people'; $personFiles = scandir($personCalendars); $personID = $_SESSION['Person_ID']; $test = preg_grep('/'.personID.'/',

首先,我是PHP的“新手”(只编写了几个月的代码),正在尝试获取一个文件供登录用户显示

我尝试了一些选项,包括
基带
url
,但它似乎没有按我需要的方式工作

以下是我的代码片段:

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

$personID = $_SESSION['Person_ID'];

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

echo basename($test);
print\r
的输出为我提供了
数组([312]=>s15399.ics)
,这很好,但我只需要
s15399.ics
部分,并将其附加到页面url的末尾,类似于
https://servername.com/index.php/calendar?s15399.ics
这样他们就可以获取文件并“订阅”到他们的日历

基带
什么都不是,但我对此并不感到惊讶

这可能吗?如果不可能,您推荐的最佳方法是什么?

您可以使用

如果您需要查找文件并且知道文件名,则不需要读取所有文件。如果文件名与人员id相同,则:

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

基带?我很困惑,在移动设备的背景下?您是否使用
url()
函数?我不确定我在听。如果只需要
$test
元素的值,请使用
重置($test)
-“返回第一个数组元素的值,如果数组为空,则返回FALSE。”很抱歉,我正在测试
url()
函数,但它不起作用,因此我没有使用它。我已经取出了。如果
preg\u grep
返回一个由多个元素组成的数组,该数组会返回哪个元素?因为我不喜欢代码中的歧义,所以我也不知道匹配的模式是什么:)数组中的第一个元素还有next()和prev()以及last(),它们可以帮助您,但现在current()做您的工作。并不是百分之百的相信它对指针的作用。在这种情况下,为什么我更喜欢重置。但你是对的。对我来说,reset()是一个更适合你的函数,但我使用current()是因为我首先想到了它谢谢你!URL显示得很好。我试图在google中添加带有链接的日历,但遇到了一个错误
您提供的地址没有包含有效ical或GData格式的日历。
所以URL无效?ics文件存储在与页面文件不同的位置。另外,还有什么比scandir()更好的呢?可能有数千个文件需要扫描。我不知道谷歌日历和他们接受的文件格式。你不能在现有问题上附加其他问题。你是对的,对此感到抱歉。事实证明,它也不是从outlook或Ical读取的。包含该文件的文件夹是否可以从Internet访问,或者是否必须通过PHP脚本传递该文件?仅键入该文件的url是无法访问的。因此也需要提供一个URL。
// 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";
}
$filename = "s{$personID}.ics";
if ( file_exists($filename) ) {
    //
} else {
    //
}