来自外部.php文件的PHP变量,在JavaScript中?

时间:2009-09-16 13:34:01

标签: php javascript

我有这个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 个答案:

答案 0 :(得分:4)

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

<?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;
}

答案 1 :(得分:2)

RageZ的回答只是关于我要发布的内容,但更具体一点,你的php文件的最后一行应该是这样的:

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

javascript将在第二个参数周围没有引号的错误,我假设$ new_file_name是你要传入的内容。为了安全起见,你甚至可能想要转义文件名(我认为在这种情况下addslashes会工作) )。

答案 2 :(得分:1)

一个愚蠢的人曾经说过; “没有愚蠢的问题,只有愚蠢的答案”。虽然他错了;实际上有很多愚蠢的问题,但这不是其中之一。

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

您可以使用Ajax使PHP和JavaScript在这个问题上协同工作,我建议使用jQuery框架来实现这一点,主要是因为它具有易于使用的Ajax函数,但也因为它有很好的文档。

答案 3 :(得分:0)

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

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

(必须使用addslashes和引号才能将PHP字符串编码为JavaScript字符串文字。)

然后在stopUpload()函数中添加'filename'参数并将其吐出HTML。

$new_file_name=$random_digit.$file_name;

抱歉,这还不足以使文件名安全。 $file_name可能包含“x /../../ y”等段或其他各种非法或不一致支持的字符。文件名卫生处理比它看起来要困难得多;你最好编写一个全新的(随机)文件名,而不是完全依赖用户输入。