php+mysql存取文件

近期的项目由于特殊原因,需要将文件存到数据库中。今天特地测试,首先在php网站上传文件,将文件读取出来——再存入到MySQL数据库中。

一、首先创建php 代码如下(网上找了段代码进行过修改):源代码 http://blog.csdn.net/jonathanlin2008/article/details/6185162

<?php
/**
 * Created by PhpStorm.
 * User: yun
 * Date: 2015/7/10
 * Time: 22:04
 */
//echo md5(‘ggHScquI8EzIPSwV‘);

if($_SERVER[‘REQUEST_METHOD‘] == ‘POST‘){
    $myfile=$_FILES[‘myfile‘];
   /* echo file_get_contents($myfile[‘tmp_name‘]);
    exit;*/
if($myfile != "none" && $myfile != "") { //有了上传文件了

    //设置超时限制时间,缺省时间为 30秒,设置为0时为不限时
    $time_limit=60;
    set_time_limit($time_limit); //

    //名字,大小,文件格式,
    $file_name=$myfile[‘name‘];
    $file_size=$myfile[‘size‘];
    $file_type=strstr ( $file_name, ‘.‘ );

    //把文件内容读到字符串中  直接在读取的临时文件,因为不需要将文件放到目录中。
    $fp=fopen($myfile[‘tmp_name‘],  "rb");
    if(!$fp) die("file open error");
    $file_data = addslashes(fread($fp, $file_size));
    fclose($fp);

   /* $dbh = new PDO ( ‘mysql:host=192.168.1.168;port=3306;dbname=testdb;‘, ‘root‘, ‘123‘ );*/

    /*下面是将pdo进行了一个简单的封装*/
    $userclass = dirname(__FILE__) . ‘/source/module/User.php‘;
    require_once($userclass);
    $user = new User();

    /*t_testfile 表中file字段数据类型为longblod*/
    $sql="insert into t_testfile (file) values (‘$file_data‘)";
    $result=$user->db->doSql($sql);

    //下面这句取出了刚才的insert语句的id
    $id=$user->db->getLastId();

    echo "上传成功--- ";
    echo "<a href=‘show_info.php?id=$id‘>显示上传文件信息</a>";
}
else {
    echo "你没有上传任何文件";
}
}

/* function  doSql($sql, $model = ‘many‘, $debug = false)
{
    if ($debug) echo $sql;
    $this->sth = $this->dbh->query($sql);
    $this->getPDOError();
    $this->sth->setFetchMode(PDO::FETCH_ASSOC);
    if ($model == ‘many‘) {
        $result = $this->sth->fetchAll();
    } else {
        $result = $this->sth->fetch();
    }
    $this->sth = null;
    return $result;
}*/
?>

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>测试文件上传并存入到MySQL数据库中</title>
    <script src="../js/jquery-1.8.3.min.js"></script>

</head>
<body>
  <div>
      <form enctype=‘multipart/form-data‘ name=‘myform‘ action=‘uploadtest.php‘ method=‘post‘>
            <input type="file" id="myfile" name="myfile" />
          <input type="submit" id="btnupload" value="上传文件"/>
      </form>
  </div>
</body>
</html>

二、遇到问题:文件大于php默认大小是,上传获取不到文件,直接报“你没有上传任何文件”

  所以:调整php.ini配置文件中的参数,后重启Apache服务。

调整的变量:

file_uploads = On ;打开文件上传选项

upload_max_filesize = 500M ;上传文件上限

如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长

post_max_size = 500M ;post上限

max_execution_time = 1800 ; Maximum execution time of each script, in seconds脚本最大执行时间

max_input_time = 1800 ; Maximum amount of time each script may spend parsing request data

memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)内存上限

三、点击上传又出现一个问题。MySQL server has gone away,由于英语很菜,直接有道翻译:‘MySQL服务器已经消失’

百度(还是要感谢百度,和广大牛人的分享)让我找到了解决方法,不至于迷失很久。

解决方法:http://www.cnblogs.com/cenalulu/archive/2013/01/08/2850820.html

时间: 2024-10-13 06:16:55

php+mysql存取文件的相关文章

mysql.sock文件丢失

有的时候启动mysql服务器时会报错,据日志显示丢失mysql.sock文件 如图: 处理:建立软链接文件,因为刚安装完的数据库首次复制也是从tmp目录下copy过来的 如果解决了最好解决不了的话.看一下其他网友给的建议: 1./var/lib/mysql 所有文件权限 改成mysql.mysql: 2.修改/etc/my.cnf文件: [mysql d] socket=/var/lib/mysql .sock [mysql ] socket=/tmp/mysql .sock

mysql pid文件

mysql pid文件记录的是当前mysqld进程的pid. 通过Mysqld_safe启动mysql时,mysqld_safe会检查pid文件,未指定PID文件时,pid文件默认名为$DATADIR/`hostname`.pid 1)pid文件不存在,不做处理 2)文件存在,且pid已占用则报错"A mysqld process already exists" 文件存在,但pid未占用,则删除pid文件 mysqld启动后会通过create_pid_file函数新建pid文件,通过g

linux系统下迁移mysql数据库文件

linux下(这里是centos),mysql安装后,数据库的数据默认存放在/var/lib/mysql目录下,如果该目录下挂载的磁盘空间很少,不够用,需要迁移到其他的目录位置. 方法一: 参照windows下的方法,把/var/lib/mysql移到需要的目录,再修改/etc/my.cnf文件,指定数据目录.这方面的教程网上很多,大家可以去搜索一下. 方法二: 使用linux下的软连接方法,具体操作如下:(以迁移到/home/mysql/目录为例) 先停止mysql: /etc/init.d/

硬盘空间满导致mysql ibd文件被删后提示Tablespace is missing for table &#39;db_rsk/XXX&quot;

昨天一早,开发人员反馈说一个测试环境报Tablespace is missing for table 'db_rsk/XXX",周末刚升级过,特地让开发回去查了下,说脚本中肯定没有drop table的操作.datadir下检查了下,发现frm文件在的ibd文件没有了,bing了下,没发现类似异常.于是先回到mysql.err往回搜索,半天后发现上周五下午mysql出现了一次异常宕机,说是磁盘空间不足了,看日志该文件被损坏了,如下: 2016-11-12 11:31:00 28443 [ERRO

[转]MySql ibdata1文件太大如何缩小

From : http://blog.chinaunix.net/uid-24373487-id-4223322.html 原文地址:MySql ibdata1文件太大如何缩小 作者:emailwht MySql ibdata1文件太大如何缩小 MySql innodb如果是共享表空间,ibdata1文件越来越大,达到了30多个G,对一些没用的表进行清空:truncate table xxx;然后optimize table xxx; 没有效果因为对共享表空间不起作用.mysql ibdata1

MySQL 物理文件体系结构的简单整理说明

本文出处:http://www.cnblogs.com/wy123/p/7102128.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 本文的数据库版本是MySQL5.7.18,简单介绍一下MySQL数据文件目录的物理结构和作用,从中可以窥见MySQL的整体上的物理文件结构以及逻辑功能.可以从整体结构上了解到MySQL的物理体系架构(本人学习的思路往往是被与已了解的事物对照学习,或者快速了解其轮廓,再逐步细

mysql 提示找不到mysql.sock文件

免编译安装mysql后,出现错误提示: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 解决方法: 1.vi /etc/my.cnf              找到socket=这项 2.修改socket路径:socket=/usr/local/mysql/lib/mysql.sock  #根据mysql安装目录修改 3.ln -s /usr/local/my

如何查看和更改mysql数据库文件存放位置

mysql数据库的数据文件默认是存放在:C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\datal ,从哪里可以看到呢? 当然是从mysql的配置文件里了,找到Mysql的安装目录,找到my.ini,然后通过搜索找到datadir=,后面的就是mysql数据库文件的存放位置了,要修改也非常简单,首先把后面的地址改成自己想要的地址,接着把原来存放数据库文件位置里的所有内容都复制到新地址里,再重启

MySQL日志文件

1)错误日志(error log) 错误日志对MySQL的启动.运行.关闭过程进行了记录. 通过show variables like 'log_error'来定位该文件. mysql> show variables like 'log_error'; +---------------+---------------------------------+ | Variable_name | Value | +---------------+----------------------------