代码之家  ›  专栏  ›  技术社区  ›  Spoonk

外部.PHP文件中的PHP变量,在JavaScript内部?

  •  0
  • Spoonk  · 技术社区  · 17 年前

    我已经获得了将文件上传到服务器的JavaScript代码(命名为“upload.js”):

    function startUpload(){
        document.getElementById('upload_form').style.visibility = 'hidden';
        return true;
    }
    
    function stopUpload(success){
        var result = '';
        if (success == 1){
            result = '<div class="correct_sms">The file name is [HERE I NEED THE VARIABLE FROM THE EXTERNAL PHP FILE]!</div>';
        }
        else {
            result = '<div class="wrong_sms">There was an error during upload!</div>';
        }
        document.getElementById('upload_form').innerHTML = result;
        document.getElementById('upload_form').style.visibility = 'visible';
        return true;
    }
    

    我有一个简单的.php文件,通过重命名上传的文件来处理上传(我将其命名为“process_file.php”),并再次连接upload.js以获取结果:

    <?php
        $file_name = $HTTP_POST_FILES['myfile']['name'];
    
        $random_digit = rand(0000,9999);
    
        $new_file_name = $random_digit.$file_name;
    
        $path= "../../../images/home/smsbanner/pixels/".$new_file_name;
        if($myfile !=none)
        {
            if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
            {
                $result = 1;
            }
            else
            {
                $result = 0;
            }
        }
        sleep(1);
    ?>
    
    <script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>
    

    upload.js 如果上传过程正确,是否将上传文件的新名称可视化为答案?我在上面的JavaScript代码中写下了我需要将新名称的答案放在哪里。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Peter Mortensen Pieter Jan Bonestroo    15 年前

    您必须将代码更改为以下内容。

    <?php
        $file_name = $HTTP_POST_FILES['myfile']['name'];
    
        $random_digit=rand(0000,9999);
    
        $new_file_name=$random_digit.$file_name;
    
        $path= "../../../images/home/smsbanner/pixels/".$new_file_name;
        if($myfile !=none)
        {
            if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path))
            {
                $result = 1;
            }
            else
            {
                $result = 0;
            }
        }
        sleep(1);
    ?>
    
    <script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo "message" ?>');</script>
    

    还有你的JavaScript代码,

    function stopUpload(success, message){
        var result = '';
        if (success == 1){
            result = '<div class="correct_sms">The file name is '+message+'!</div>';
        }
        else {
            result = '<div class="wrong_sms">There was an error during upload!</div>';
        }
        document.getElementById('upload_form').innerHTML = result;
        document.getElementById('upload_form').style.visibility = 'visible';
        return true;
    }
    
        2
  •  2
  •   Alex B    17 年前

    <script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo $new_file_name ?>');</script>
    

    javascript将在第二个参数周围没有引号的情况下出错,我假设$new_file_name是您想要传递的。为了安全起见,您可能甚至想要转义文件名(我认为在本例中addslashes可以工作)。

        3
  •  1
  •   Jake    17 年前

    除此之外,您还声明.js正在上载该文件。这不是真的。 我打赌你没有发布你所有的代码。

    Ajax ,我建议使用 jQuery 框架来实现这一点,主要是因为它具有易于使用的Ajax功能,而且还因为它有优秀的文档。

        4
  •  0
  •   bobince    17 年前

    如何使用以下内容扩展回调脚本:

    window.top.window.stopUpload(
        <?php echo $result; ?>,
        '<?php echo(addslashes($new_file_name)); ?>'
    );
    

    (addslas和引号是将PHP字符串编码成JavaScript字符串文字所必需的。)

    然后将“filename”参数添加到 stopUpload() 函数并在HTML中输出它。

    $new_file_name=$random_digit.$file_name;
    

    抱歉,这不足以保证文件名的安全。 $file_name 可能包含x/./../y之类的段,或各种其他非法或不一致支持的字符。文件名清理比看起来要困难得多;您最好创建一个全新的(随机的)文件名,而不依赖用户输入。