定期使用表单将文件上传到服务器

时间:2015-03-04 00:30:38

标签: php mysql

我正在尝试将txt文件定期上传到MYSQL数据库,因为txt文件内容随时间变化。我有2个文件:db.php和uploader.php。下面是db.php的代码

<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action="uploader.php" method="post"
                        enctype="multipart/form-data">
<input type="file"  onchange="this.form.submit()" name="file"  size="50" />
<br /> 
</form>
</body>
</html>

uploader.php的代码

<?php
$contents = file_get_contents($_FILES['file']['tmp_name']) 
or die( "Could not copy file!");

$username = "username";
$password = "password";
$hostname = "localhost";

//connection to the database
$connection=mysql_connect ($hostname, $username, $password)
or die("Unable to connect to MySQL");

//select a database to work with
$selected = mysql_select_db("test",$connection)
or die("Could not select examples");

$result2 = mysql_query("INSERT INTO testtable(data) VALUES (". $contents. ")");
mysql_close($connection);
?>

运行程序后,我必须浏览我的txt文件,并将重定向到uploader.php。然后将数据发送到我的数据库。由于数据正在定期写入我的电脑中的txt文件,我需要自动再次将文件上传到我的数据库,而无需再次浏览txt文件。问题是,我该怎么做?如果我要定期手动刷新网页,新数据将被发送到我的数据库,但当然,我不想手动刷新页面,因为它是不切实际的。我尝试添加<META HTTP-EQUIV="refresh" CONTENT="5">,每5秒刷新一次页面,但这不起作用

我是非常新的php所以如果答案简单易懂,我将非常感激。非常感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您遇到的问题是,浏览器的HTML表单界面旨在与人类进行交互 - 但您希望它与计时器或类似机制进行交互。

所以基本上,你必须用一些东西替换浏览器,这很容易实现自动化 - 我建议你使用wget

  • 使用shell脚本,客户端PHP或任何可用的内容来创建POST数据
  • 使用wget --method=POST --post-data="$POST" http://your.domain/and.url转移
  • 使用cron自动设置

答案 1 :(得分:0)

这不是一个完整的解决方案。这只是一个示例,说明如何每nn秒重复表单提交。请参阅底部的重要说明,然后考虑Eugen Rieck的解决方案。

要做你要问的事,你可以使用javascript / jQuery。代码如下所示:

<html>
<head>
    <title>File Uploading Form</title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){
            setTimeout(function(){
                myTimeoutFunction();
            },100000); //delay 100 seconds before first submit
        });
        myTimeoutFunction(){
            $('form').submit();
            setTimeout(myTimeoutFunction, 1000000); //repeat every 100 seconds
        }
    </script>
</head>
<body>
    <h3>File Upload:</h3>
    Select a file to upload: <br />
    <form action="uploader.php" method="post" enctype="multipart/form-data">
        <input type="file"  onchange="this.form.submit()" name="file"  size="50" />
        <br /> 
    </form>
</body>
</html>

注意:

  1. 这将要求浏览器在此网页上保持打开状态。一旦页面/浏览器关闭,这将停止工作。

  2. 如您所见,用户每次都必须选择该文件。

  3. <head>

  4. 中加载jQuery库
  5. 调用jQuery submit()方法以编程方式提交表单

  6. 在setTimeout中换行,以便在重新提交之间延迟nn毫秒

  7. 参考:

    setTimeout or setInterval?

答案 2 :(得分:0)

我认为您可以使用javascript / jquery每隔x秒重复一次表单上传。

<body>
<head>
    <script src="https://code.jquery.com/jquery-2.1.3.js"></script>
</head>
<h3>File Upload:</h3>
Select a file to upload:
<br />
<form id="upload-form" action="uploader.php" method="post" enctype="multipart/form-data">
    <input type="file" onchange="this.form.submit()" name="file" size="50" />
    <br />
</form>

<script>
    /*
     * On form submission we will use an ajax request to submit the form, then if the ajax request is successful we will resubmit the form every 60 seconds.  Not sure if the file that is being uploaded will be changed if the filesystem changes.
     */
    $('#upload-form').submit(function (e) {
        e.preventDefault();
        var form = $('#upload-form'),
            formData = new FormData(form.get(0));

        $.ajax({
            url: form.attr('action'),
            type: form.attr('method'),
            data: formData,
            processData: false,
            contentType: false
        }).done(function (response) {
            setTimeout($('#upload-form').submit(), 60000);//Resubmit form every 60 seconds
            console.log('File Uploaded Successfully');
        }).fail(function (jqXhr) {
            alert('File Upload failed for some reason');
            console.error('File Upload Failed');
        }).always(function() {
        });

        return false;
    });
</script>
</body>