1

サーバーにemail.txtを保存しています。email.txtのパスは次のとおりです。

/home/xxxx/public_htnl/email.txt

email.txtは、毎日更新されるサブスクライバーの数千の電子メールで構成されています。cronを使用してこれらのメールを毎日他のデータベースにインポートしたいと思います。

私はこれを試しましたが、エラーが発生します

読み込めませんでした。Access denied for user 'test'@'localhost' (using password: YES)

走る許可がないと思いますLOAD DATA INFILE

私のコードは次のとおりです。

<?php

$db = mysql_connect('localhost', 'test', 'test')
or die('Failed to connect');
mysql_select_db('test', $db);


$string = file_get_contents("http://www.xyz.com/email.txt", "r");
$myFile = "/home/xxx/public_html/email.txt";

$fh = fopen($myFile, 'w') or die("Could not open: " . mysql_error());
fwrite($fh, $string);
fclose($fh);


$result = mysql_query("LOAD DATA INFILE '$myFile'" .
                  " INTO TABLE email");
if (!$result) {
die("Could not load. " . mysql_error());
}
?>

他の良い方法でも構いません。メールなどを保存する際に、他のデータベースに直接データを保存することはお勧めしません。

4

1 に答える 1

0

ルートMySQLユーザーとして、クエリを実行してみてください:

GRANT FILE on *.* to 'test'@'localhost';

それでもエラーが発生する場合は、テストユーザーのユーザー名とパスワードが正しいこと、およびMySQLにアクセスしているホストがテストユーザーとパスワードのホストと一致していることを確認してください。

編集:

<?php

$db = mysql_connect('localhost', 'test', 'test') or die(mysql_error());

if (!mysql_select_db('test', $db)) die(mysql_error());

$emails = file("http://www.xyz.com/email.txt");

foreach($emails as $email) {
    $email = trim($email);
    if ($email == '' || strpos($email, '@') === false) continue;
    $email = mysql_real_escape_string($email);

    $query = "INSERT INTO `email` VALUES('$email')";
    $result = mysql_query($query);
    if (!$result) {
        echo "Failed to insert $email.  " . mysql_error() . "<br />\n";
    }
}

非常に多くの電子メールがある場合は、電子メールアドレスの配列を作成し、拡張挿入を頻繁に実行できます。

INSERT INTO emails VALUES('email1'), ('email2'), ('email3'), ('email4')
于 2012-08-11T00:55:44.987 に答える