我会尽力解释这个:
我有一个上传页面。用户粘贴或拖放/删除代码文件,并将其上载到其用户目录。在他们上传之前,他们需要通过下拉菜单选择它的语言。该选项值预先添加到文件中,并添加随机字符串。因此,如果他们粘贴了一些Java,然后点击上传,那么该文件将是
java-iVW827pVjEEo.txt
这部分效果很好。
我有另一个页面show_file.php,它以相同的格式和语法突出显示方式显示该文件的内容。 但是只有在我手动输入文件名时才有效。问题出现在用户的个人资料页面上。文件显示在用户的个人资料中(我稍后会更改为标题。只需要让这部分工作):
这是通过这个foreach循环完成的:
foreach($files as $file) {
echo '<a href="'.$link.'">'.basename($file).'</a><br/>';
}
这是它在show_file.php页面上的显示方式:
语法突出显示由文件名的第一部分决定。无论字符串中是什么语言,它都会将其添加到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
如何将我的锚标记链接到相应的文件?
感谢。
答案 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/>';
}