【问题标题】:PHP Beginner: How to pass PHP variable from one PHP code segment to another?PHP 初学者:如何将 PHP 变量从一个 PHP 代码段传递到另一个 PHP 代码段?
【发布时间】:2026-02-14 21:10:02
【问题描述】:

我有index.php,它将文件上传到服务器并设置了几个 PHP 变量(如 $target_folder_and_file_name)。

index.php也有下面一行(原来是index.html):

<script language="JavaScript" src="main.js.php"></script>

index.php 返回浏览器后,浏览器向服务器请求main.js.php(对吗?)。

我可以从 main.js.php 中的 PHP 代码以某种方式访问​​ $target_folder_and_file_name 吗?

【问题讨论】:

    标签: php javascript html session state


    【解决方案1】:

    @TheJacobTaylor 是对的,会话是最好的,但如果你不想保密 "$target_folder_and_file_name",你也可以使用:(index.php)

    <script type="text/javascript" src="main.js.php<?php echo '?target='.urlencode($target_folder_and_file_name); ?>"></script>
    

    在你的 main.js.php 中

    <?php
    $target_folder_and_file_name = htmlspecialchars(urldecode($_GET['target']));
    ...
    ?>
    

    使用 SESSIONS,这看起来像这样:

    在你的 index.php 中

    <?php
    session_start();
    $_SESSION['target'] = $target_folder_and_file_name;
    
    ...
    echo '<script type="text/javascript" src="main.js.php"></script>';
    ...
    ?>
    

    在你的 main.js.php 中:

    <?php
    session_start();
    if( isset( $_SESSION['target'] ) )
    {
        $target_folder_and_file_name = $_SESSION['target'];
    }
    else
    {
        $target_folder_and_file_name = FALSE;
    }
    ...
    ?>
    

    【讨论】:

    • 非常感谢您的代码!我还有一个问题:会话实际何时结束?
    • 默认情况下,会话会持续到用户关闭浏览器。但您可以使用 session_destroy() 手动进行。
    【解决方案2】:

    完成此操作的最简单方法是将信息放入 PHP 会话中。会话持续超过一次往返。您还可以将您的信息添加到数据库、缓存、外部存储或 javascript 的 URL。正如我所提到的,会话是最简单的。

    http://www.php.net/manual/en/session.examples.basic.php

    <?php
    session_start();
    // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
    if (!isset($_SESSION['count'])) {
      $_SESSION['count'] = 0;
    } else {
      $_SESSION['count']++;
    }
    ?>
    

    【讨论】:

    • 我还应该警告你要非常小心。如果您允许人们上传文件,请不要让他们控制文件的去向、文件的名称或将文件放置在 Web 服务器文档文件夹中。有很多工具和人喜欢利用这种安全漏洞。这可能被证明是一个有价值的参考:php.net/manual/en/features.file-upload.php
    【解决方案3】:

    如果您不希望所有内容都依赖于会话,则可以在获取时将参数传递给脚本。

    index.php

    <?
     //get filename in whatever manner you currently do
    ?>
    <script language="JavaScript" src="main.js.php?t=<?= urlencode($filename); ?>"></script>
    

    ma​​in.js.php

    <?php
    $filename = urldecode($_GET['t']);
    //do whatever you need to with the filename
    ?>
    

    【讨论】: