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

在实际版本中,此解决方案将成为 codeigniter 解决方案的一部分……所以我将拥有一个适当的 MVC。但是现在,我希望能够将所有逻辑包含在一个文件中。你能告诉我我该怎么做吗?

4

3 回答 3

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
        }
    });
});
于 2013-01-03T16:00:14.753 回答
1

应该在以下位置查看 PHP 文档: http: //mx2.php.net/manual/en/function.copy.php

有一个复制文件的例子。

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

请记住,此目录必须存在并且彼此可见(在同一 Web 服务器内)

于 2013-01-03T16:06:26.707 回答
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';

当然,这过于简单了,你必须做一些错误处理输入检查和安全改进,但我只是想说明要走的路。

于 2013-01-03T16:06:26.127 回答