mb_send_mailで画像を送信

$body = <<< EOM
<!DOCTYPE>
<html lang="ja">
<head>
</head>
<body>
Look!<br>
<strong style="color:red;">apple</strong><br>
<img src="http://hpscript.com/app/apple.jpg">
</body>
</html>
EOM;

画像を置いてるパスを指定すれば、問題なく送信できます。
これはS3でもいいですね。

$body = <<< EOM
<!DOCTYPE>
<html lang="ja">
<head>
</head>
<body>
Look!<br>
<strong style="color:red;">apple</strong><br>
<img src="http://hpscript.com/app/apple.jpg">

<audio id="audio" preload="auto">
   <source src="http://hpscript.com/app/0.mp3" type="audio/mp3">
   <p>※ご利用のブラウザでは再生することができません。</p>
</audio>
<input type="button" onclick="audioPlay()" value="再生">
<input type="button" onclick="audioPause()" value="停止">
</body>
</html>
EOM;

mp3だと再生されないようです。
さあ、次は、

phpでHTMLメールの送信

vagrantから送信します。

<?php
mb_language('Japanese');
mb_internal_encoding("UTF-8");
$header_info="From: admin@example.com"."\nContent-Type: text/html;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion();

$body = <<< EOM
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
</head>
<body>
hogehoge<br>
<strong>Hello</strong>
</body>
</html>
EOM;
print $body;
mb_send_mail("hoge@career.com",'test',$body,$header_info);
?>

hotmail、携帯のキャリア どちらにもhtmlメールで到着しますね。
bodyのEOMのところを(1)HTML5で送りたい、(2)CSSでスタイリングしたい、(3)動画を送りたい、(4)MySQLから引っ張て来て送信したい

html5でも問題ありません。

$body = <<< EOM
<!DOCTYPE>
<html lang="ja">
<head>
</head>
<body>
engineer<br>
<strong>meet up</strong>
</body>
</html>
EOM;

例えば、インラインスタイルでも

$body = <<< EOM
<!DOCTYPE>
<html lang="ja">
<head>
</head>
<body>
engineer<br>
<strong style="color:red;">meet up</strong>
</body>
</html>
EOM;

大丈夫ですね。

次は、youtubeのiframe、画像、mp3で行きましょう。

$body = <<< EOM
<!DOCTYPE>
<html lang="ja">
<head>
</head>
<body>
today's Video<br>
<strong style="color:red;">Michael Jackson - Thrillers</strong>
<iframe width="200" height="150" src="https://www.youtube.com/embed/sOnqjkJTMaA" frameborder="0" allowfullscreen></iframe>
</body>
</html>
EOM;

iframeだと上手く表示されません。何故でしょう。mail boxはserver上なので、headerが問題でしょうか?
XSS・クロスサイトスクリプティング対策か。。

画像のアップロード

try {
	if($_FILES["file"]){
	move_uploaded_file($_FILES["file"]["tmp_name"], "./img/test.jpg");
	}
} catch(Exception $e){
	echo "error:", $e->getMessage().PHP_EOL;
}

?>

<body>
	<form action="" method="POST" enctype="multipart/form-data">
		<input type="file" name="file">
		<input type="submit" value="upload">
	</form>
</body>

basic認証を実装する

switch(true){
	case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
	case $_SERVER['PHP_AUTH_USER'] !== 'admin':
	case $_SERVER['PHP_AUTH_PW'] !== 'test':
		header('WWW-Authenticate: Basic realm="Enter username and password."');
		header('Content-Type: text/plain; charset=utf-8');
		die('このページを見るにはログインが必要です');
}

header('Content-Type: text/html; charset=utf-8');

WWW-Authenticateヘッダ:Webブラウザに対して認証用ダイアログの表示をさせるための指示

crontabでスマホの売上ランキングをmailに送る

スマホの売上ランキング、いつ見たいか?
金曜日は特に見たくないので、月~木のうちのどれかでしょうか。
ということで、

$ crontab -e

localでバッチ処理します。

05     02      *       *       1   cd /home/hoge/local/device/ ; /usr/local/bin/php index.php

う~ん、月曜朝の楽しみが一つ増えました。
ヨシ、OK、この際、後学のため、売れてる機種の並行輸入もやっちゃいましょう♪

スマホ売れ筋ランキングをAWSから毎週Gmailに送りたい

Web系の仕事をしていると、どの端末がどれ位売れているか、常に把握しておかないと、話にならない。ということで、、、

foreach($model_data as $value){
	$k = $i + 1;
	echo $k ."位 ".$value . " ". $name_data[$i] . " (".$date_data[$i].")<br>";
	$i++; 
}

まずは、mb_send_mailの実装からか。

凄く簡単だが、

$i = 0;
foreach($model_data as $value){
	$k = $i + 1;
	$body .= $k ."位 ".$value . " ". $name_data[$i] . " (".$date_data[$i].")\n";
	$i++; 
}

mb_language("Japanese");
mb_internal_encoding("utf-8");

$email = "hogehoge@gmail.com";
$subject = "週間スマホランキング";
$to = "hogehogehoge@hotmail.com";

mb_send_mail($to, $subject, $body, "From:".$email);

vagrantからは送れる。

ec2からmb_send_mailを使いたい。使えるか?というか、使えないと困る。
とりあえずテストか。

swiftからPOSTされたデータをmysqlに入れる

php側をclassで書きます。mysqliでconnectしていますが、PDOで繋げたいですね。

$response = array();

if($_SERVER["REQUEST_METHOD"] == "POST"){
	$teamName = $_POST["name"];
	$memberCount = $_POST["old"];

	require_once '../includes/DbOperation.php';
	$db = new DbOperation();

	if($db->saveBoy($name,$Old)){
		$response['error'] = false;
		$response['message'] = '登録が完了しました';
	} else {
		$response['error'] = true;
		$response['message'] = '承認されていません';
	}
	echo json_encode($response)
}
class DbOperation {
	private $conn;

	function __construct(){
		require_once dirname(__FILE__).'/config.php';
		require_once dirname(__FILE__).'/DbConnect.php';

		$db = new DbConnect();
		$this -> conn = $db->connect();
	}

	public function saveBoy($name, $old)
	{
		$stmt = $this->conn->prepare("INSERT INTO boy(name, old) values(?, ?)");
		$stmt -> bind_param("ss", $name, $Old);
		$result = $stmt -> execute();
		$stmt -> close();
		if($result){
			return true;
		} else {
			return false;
		}
	}
}
calss DbConnect {
	private $conn;

	function __construct(){
	}

	function connect(){
		require_once 'config.php';

		$this -> conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

		if(mysqli_connect_errno()){
			echo "データベースに接続されませんでした" . mysqli_connect_errno();

			return $this -> conn;
		}
	}
}
define('DB_USERNAME', 'hoge');
define('DB_PASSWORD', 'hogehoge');
define('DB_HOST', 'local_host');
define('DB_NAME', 'swift');

続いて、X-codeでswiftを書いていきます。

strtotime

echo date("Y/m/d h:i:s");
echo "<br>";
echo date("Y/m/d h:i:s", strtotime(" - 2 sec"));

echo "<br>";
echo "<br>";
$date = "2018/05/20 12:30:00";
echo date("Y/m/d h:i:s", strtotime("$date -1 day"));
echo "<br>";
echo date("Y/m/d h:i:s", strtotime("$date -10 sec"));

preg_replaceのワイルドカード

.*を使います。

$text = "当面の金融政策運営について [PDF 195KB]";
echo preg_replace("/\[PDF.*\]/","", $text);

[PDF 195KB]が非表示となりました。

前)

後)

ディレクトリ配下のファイル名を取得

$y = "2017";
foreach(glob("file/".$y."/{*.txt}",GLOB_BRACE) as $file){
    if(is_file($file)){
        $files[] = htmlspecialchars($file);
    }
}
var_dump($files);

array(8) { [0]=> string(19) “file/2017/boj.0.txt” [1]=> string(19) “file/2017/boj.1.txt” [2]=> string(19) “file/2017/boj.2.txt” [3]=> string(19) “file/2017/boj.3.txt” [4]=> string(19) “file/2017/boj.4.txt” [5]=> string(19) “file/2017/boj.5.txt” [6]=> string(19) “file/2017/boj.6.txt” [7]=> string(19) “file/2017/boj.7.txt” }

しかしforeachでfunction Translateを回すと、 Cannot redeclareとなる。

 Cannot redeclare Translate() (previously declared in /home/vagrant/translator/test.php:40) in /home/vagrant/translator/test.php on line 40

これは困った。

phpファイルからlinuxコマンドを実行

exec('ls', $out, $ret);
print_r($out);

pdftotextの場合は、これでOK

exec('pdftotext boj.pdf boj2.txt');

ではこうするとどうでしょう?
コードがやや冗長になってしまいましたが、file_put_contentsしたpdfをpdftotextしてpdfだけunlinkします。

$i=0;
foreach($urls as $value){
    $pass = "file/".$y."/".$i.".pdf";
    $data = file_get_contents($value);
    file_put_contents($pass, $data);
    exec("pdftotext ".$pass." file/".$y."/boj.".$i.".txt");
    unlink($pass);
    $i++;
}

テキストファイルだけになってますね。

viewをどうするか?
タイトルを取得して、listで表示したい。