通过href

时间:2017-02-21 09:21:04

标签: php get href fopen

我会尽力解释这个:

我有一个上传页面。用户粘贴或拖放/删除代码文件,并将其上载到其用户目录。在他们上传之前,他们需要通过下拉菜单选择它的语言。该选项值预先添加到文件中,并添加随机字符串。因此,如果他们粘贴了一些Java,然后点击上传,那么该文件将是

java-iVW827pVjEEo.txt

这部分效果很好。

我有另一个页面show_file.php,它以相同的格式和语法突出显示方式显示该文件的内容。 但是只有在我手动输入文件名时才有效。问题出现在用户的个人资料页面上。文件显示在用户的个人资料中(我稍后会更改为标题。只需要让这部分工作):

screenshot of links

这是通过这个foreach循环完成的:

foreach($files as $file) {
      echo '<a href="'.$link.'">'.basename($file).'</a><br/>';
}

这是它在show_file.php页面上的显示方式:

displaying formatted code

语法突出显示由文件名的第一部分决定。无论字符串中是什么语言,它都会将其添加到Prism.js类名:

$user_file = "java-NGEw5X8s0W2Q.txt"; //<-- Have to enter it manually right now
$file = fopen("users/$username/code_uploads/$user_file", "r");
switch(true) {
    case strpos((string)$file, 'markup'):
        $language = 'markup';
        break;
    case strpos((string)$file, 'java'):
        $language = 'java';
        break;
    //18 other cases follow

最后,这是实际显示div的代码。它获取文件的内容,然后将$ language变量附加到类中,如下所示:

<div class="container">
<div class="show-code">
    <script src="lib/prism.js"></script> <!-- Load prism.js library -->
    <pre><code class="language-<?php echo $language?>"><?php while(! feof($file)) {echo fgets($file);}?></code></pre>
</div>
</div>

老实说,我不知道如何将用户配置文件页面上的文件路径链接到show_file.php上使用的文件路径。我尝试将$ file变量分配给$ _SESSION ['file'],然后在show_file页面上使用它,但是我收到“Undefined Index”错误。

我尝试编辑我的for循环和锚标记,如此

foreach($files as $file) {
       //echo '<a href="'.$link.'">'.basename($file).'</a><br/>';
       echo '<a href="show_file.php?id=<?php echo $file->id;?>">'.basename($file).'</a><br/>';
 }

并使用

分配我的$ user_file变量
$user_file = $_GET['id'],

但现在我得到了

Warning: fopen(users/testUser/code_uploads/<?php echo $file->id;?>): failed to open stream: No such file or directory 

如何将我的锚标记链接到相应的文件?

感谢。

1 个答案:

答案 0 :(得分:2)

看看是否有效:)

foreach ($files as $file) {
    //echo '<a href="'.$link.'">'.basename($file).'</a><br/>';
    echo '<a href="show_file.php?id=' . $file->id . '">' . basename($file) . '</a><br/>';
}

看起来在echo语句中添加的php标签给出了问题。让我知道!

更新:

好的,原来的错误消失了,但其他地方出了问题。很难从片段中弄清楚这里发生了什么。但是,如果你使用$ _GET来传递一个文件名(&#39; id&#39;),这应该在它发送到的页面上找到它:

$user_file = $_GET['id']; // There was a comma here previously for some reason instead of semi-colon. Assuming this is an array. If not you can just echo the contents.

print_r($user_file); // This will show you if you have actually received the data. If you have:

foreach ($user_file as $file) {
    echo '<a href="show_file.php?id=' . $file . '">' . basename($file) . '</a><br/>';
}