2013-01-03 70 views
0

我想構建一個頁面實用程序/原型,它將執行以下操作:如何複製按鈕上的文件?

向管理員用戶提供下拉框。當他們選擇一個選項,然後點擊一個提交按鈕,我希望能夠複製從/var/www/mysite/abc.txt文件到/var/www/mysecondsite/abc.txt

我'已經寫了php/html來顯示錶單,但我可以使用jquery/ajax調用同一個php文件上的函數嗎?

這裏是我的代碼:

<?php 

$listofcountries=''; 

echo "<h2>Select a site</h2>"; 
echo " <script src='http://myserver/myapp/assets/js/jquery-1.8.1.min.js'></script>"; 

if ($handle = opendir(dirname(__FILE__)."/secrets/")) { 

    echo "<input type=text list=site >"; 
    echo "<datalist id=site >"; 

    /* This is the correct way to loop over the directory. */ 
    while (false !== ($entry = readdir($handle))) { 
    //ignore temporary files, and directories. 
    if ((strpos($entry, "~") === false) && !(trim($entry)==".") && !($entry=="..")){ 
      //echo "$entry\n<BR>"; 
      $country=getCountryName($entry); 
      echo "<option>".$country; 
     } 
    } 
    } 
    closedir($handle); 

echo "</datalist>"; 
echo "<input type=submit id='changert'><BR>"; 
echo "<script>"; 
echo "$(document).ready(function(){"; 

echo "  $('#changert').live('click', function() {"; 
echo "  alert('in the changert function'); "; 
echo "  });"; 

echo " }); "; //end document ready 
echo "</script> "; //end javascript 



function getCountryName($fileame) 
{ 
    $pattern = '/([a-z]*).([a-z]*).([a-z]*).php/i'; 
    preg_match_all($pattern, $fileame, $matches, PREG_SET_ORDER);   
    foreach ($matches as $match) { 

     return $match[1]; 
    } 
} 
在現實版本

,該解決方案將是一個笨解決方案的一部分......因此我有一個正確的MVC。 但現在,我想能夠在一個文件中包含所有的邏輯。 你能告訴我我該怎麼做?

回答

1

jQuery只是JavaScript,所以它都在客戶端。任何服務器端文件複製仍然需要由PHP處理。最簡單的解決方案就是在點擊按鈕時發出AJAX請求,該請求會觸擊您的PHP API並傳遞令牌或其他內容,以便非會話用戶不會惡意複製文件。

$('#myButton').on('click', function(e) { 

    $.ajax({ 
     url : '/copyFile.php', 
     data : { 
      fileName : $('#mySelectMenu').val(), 
      token : someTokenYourPHPInjectedIntoYourJS 
     }, 
     type : 'POST', 
     success : function (data) { 
      // yay 
     } 
    }); 
}); 
+0

但可以在PHP API住在這一個代碼文件? – dot

+0

當然,只需設置一個IF塊來檢查'$ _POST ['fileName']'是否被設置,如果沒有設置,則輸出表單。 – AlienWebguy

+0

你能舉個例子嗎? – dot

0

您的用戶界面上添加一個Ajax調用,

$.ajax({ 
    url: 'copy.php', 
    success: function(data) { 
    if(data == 'true'){ 
     alert('The file has been copied'); 
    } 
    } 
}); 

創建第二個PHP文件來處理請求

/* copy.php */ 
<?php 

$result = copy('/dir1', '/dir2'); 
echo $result?'true':'false'; 

詛咒的文件拷貝,這是過於簡單化,你必須做一些錯誤處理的輸入檢查和安全性改進,但我只是想說明如何去做。

1

應該檢查PHP文檔http://mx2.php.net/manual/en/function.copy.php

有一個的exaple複製文件。

<?php 
     $file = 'example.txt'; 
     $newfile = 'example.txt.bak'; 
     if (!copy($file, $newfile)) { 
      echo "failed to copy $file...\n"; 
     } 
    ?> 

記住這個目錄必須存在可見彼此(內相同的Web服務器)