2009-09-16 4 views
0

나는 (이름을 "upload.js") 내 서버에 파일을 업로드이 자바 스크립트 코드를 가지고 :JavaScript 내부의 외부 .php 파일에서 가져온 PHP 변수?

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

코드를 다음과 같이 변경해야합니다.

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

그리고 자바 스크립트 코드

,

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; 
} 
+0

나는 그들을 대체했지만 모든 것이 작동하지 않습니다. 아마도 내 PHP 파일에서 "메시지"를 대체해야합니다. 그러나 무엇과 어떻게? – Spoonk

+0

무슨 뜻인지 이해가 안 되니? 나는 무엇을 표시해야하는지 모르겠다. 추신 : 감사합니다. 따옴표를 추가했습니다. – RageZ

+0

감사합니다. 당신의 해결책은 Alex B – Spoonk

1

바보 같은 사람이 한 번 말했다; "어리석은 질문은 없으며 바보 같은 대답은 없다." 그는 틀 렸습니다. 실제로 어리석은 질문이 많습니다. 그러나 이것은 그들 중 하나가 아닙니다.

그 외에도 .js가 파일을 업로드 중임을 명시하고 있습니다. 이것은 사실이 아닙니다. 나는 모든 코드를 게시하지 않았을 것입니다.

Ajax을 사용하여이 문제에 대한 PHP와 JavaScript를 함께 사용할 수 있습니다.이 작업을 수행하기 위해 jQuery 프레임 워크를 사용하는 것이 좋습니다. 주로 Ajax 용 함수를 사용하기 쉽기 때문에 또한 훌륭한 문서를 가지고 있기 때문에 좋습니다.

2

그냥 게시 할 수 있지만, 좀 더 구체적으로 무슨 일이 있었는지에 대해, 당신의 PHP 파일의 마지막 줄은 다음과 같이해야했다 RageZ의 대답 :

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

자바 스크립트 주위에 따옴표없이 오류가 발생하지 그 두 번째 인자와 나는 $ new_file_name이 당신이 전달하기를 원하는 것으로 가정하고있다. 안전을 위해서 파일명을 이스케이프하고 싶을 것이다. (이 경우에는 addslashes가 동작 할 것이다).

0

방법으로 콜백 스크립트 연장에 대해 (. addslashes 따옴표는 PHP 문자열 리터럴 자바 스크립트 문자열로 인코딩 나올 수 있도록하는 데 필요한)

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

그런 다음 '파일 이름을 추가 '매개 변수를 stopUpload() 함수에 추가하고 HTML에서 추출합니다.

$new_file_name=$random_digit.$file_name; 

죄송 합니다만 파일 이름을 안전하게 만드는 것으로 충분하지 않습니다. $file_name에는 'x /../../ y'또는 다양한 다른 불법적이거나 일관성없는 지원 문자가 포함될 수 있습니다. 파일명 sanitisation는보기보다는 매우 단단하다; 완전히 새로운 (무작위) 파일 이름을 만들고 사용자 입력에 전혀 의존하지 않는 것이 좋습니다.