Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么可以';是否将我的gmail标题信息主题插入sqlite3数据库?_Php_Utf 8_Sqlite_Gmail_Mime - Fatal编程技术网

Php 为什么可以';是否将我的gmail标题信息主题插入sqlite3数据库?

Php 为什么可以';是否将我的gmail标题信息主题插入sqlite3数据库?,php,utf-8,sqlite,gmail,mime,Php,Utf 8,Sqlite,Gmail,Mime,代码已经过测试,所有的消息id,uid,subject-gmail头信息都可以插入到我的sqlite3数据库中 <?php $db='/home/email.db'; // function get_gmail can get all the message_id,uid,subject gmail header info. function get_gmail(){ $email_data=array(); $hostname =

代码已经过测试,所有的消息id,uid,subject-gmail头信息都可以插入到我的sqlite3数据库中

<?php
    $db='/home/email.db';

   // function get_gmail  can get all the message_id,uid,subject gmail header info.
   function get_gmail(){
        $email_data=array();
        $hostname = '{imap.gmail.com:993/imap/ssl}';
        $username = 'xxxx@gmail.com';
        $password = 'yyyy';
        $inbox = imap_open($hostname,$username,$password);
        $nums=imap_num_msg($inbox);
        for ($i=1;$i<=$nums;$i++){
            $overview = imap_fetch_overview($inbox, $i, 0);
            $x1 = $overview[0]->message_id;
            $x2 = $overview[0]->uid;
            $x3 = $overview[0]->subject;
            $email_data[]=array($x1,$x2,$x3);
            }
        imap_close($inbox);
        return  $email_data;
        }

    //function insert_data can insert all the data into my sqlite3 database.
    function insert_data($array){
        Global $db;
        $dbh=new PDO("sqlite:{$db}");
        $dbh->beginTransaction();
        $sql = "INSERT INTO gmail(message_id,uid,subject) VALUES (?,?,?)";
        $query = $dbh->prepare($sql);
        foreach($array as $item){
            $query->execute($item);
            }
        $dbh->commit();
        $dbh->beginTransaction();
        $dbh=null;
    }

    $data=get_gmail();
    insert_data($data);
?>
有两个问题需要解决

1.mb_解码_MIME头
并非所有MIME RFC 2047格式的主题都需要更改,以
=?GB2312
开头的字符串将更改。
如何添加if-else结构来完成此工作

2.插入数据功能无法运行。
PHP致命错误:在第49行的非对象上调用成员函数execute()
$query->execute($item)中的一些bug,为什么在不使用mb_decode_mimeheader函数更改字符串时可以运行该语句

虽然我不会确切回答“为什么”(抱歉,这里太晚了),但您可以尝试使用将其存储在数据库中。确保稍后使用iconv处理它,因为它通常不存储在utf8中。(至少就我而言)

<?php
    $db='/home/email.db';

    function get_gmail(){
        mb_internal_encoding('UTF-8'); 
        $email_data=array();
        $hostname = '{imap.gmail.com:993/imap/ssl}';
        $username = 'xxxx@gmail.com';
        $password = 'yyyy';
        $inbox = imap_open($hostname,$username,$password);
        $nums=imap_num_msg($inbox);
        for ($i=1;$i<=$nums;$i++){
            $overview = imap_fetch_overview($inbox, $i, 0);
            $x1 = $overview[0]->message_id;
            $x2 = $overview[0]->uid;
            $x3 = $overview[0]->subject;
            $x3 = mb_decode_mimeheader($x3);
            $email_data[]=array($x1,$x2,$x3);
            }
        imap_close($inbox);
        return  $email_data;
        }


    function insert_data($array){
        Global $db;
        $dbh=new PDO("sqlite:{$db}");
        $dbh->beginTransaction();
        $sql = "INSERT INTO gmail(message_id,uid,subject) VALUES (?,?,?)";
        $query = $dbh->prepare($sql);
        foreach($array as $item){
            $query->execute($item);
            }
        $dbh->commit();
        $dbh->beginTransaction();
        $dbh=null;
    }

    $re=get_gmail();
    insert_data($re);
?>
$x3 = $overview[0]->subject;
$subject =  imap_mime_header_decode(x3);
$subject = iconv('ISO-8859-2','utf-8',$subject[0]->text);