マルチブログ
こんばんは
最近、業務も本格的になり、日々勉強中です。
初めて仕事でWordPressを使ったのですが、なかなか難しかった。
1つ目の難関はマルチサイト化
マルチサイト化は
サブドメイン型とサブディレクトリ型の2種類あります。
今回はサブディレクトリ型で行いました。
マルチサイト化はこちらの記事を参考にさせていただきました。
参考:WordPressのマルチサイト機能で複数のブログを管理する
wp-config.phpやら.htaccessやら普段そこまで触らないファイルを触るので緊張しましたね。
なんとかマルチサイトかに成功し、次はディレクトリ名を決めるときにbolog1_wpを使ったんですが
_を使用すると良くないみたいなので、-などを使いましょー
- wpをつけた理由は既に同じ名前のディレクトリが静的ページで作られていたため、
同じ名前のディレクリはWPで使えないんからなんですね。
その辺も先輩に最初に指摘していただけなければ、考えずに突っ切ってしまってただろう。。
その辺りの基本的な知識も、もっとつけて作業前に全体の作業内容を把握できるように
ならなければ・・
今回の作ったサイトはなかなかカテゴリ分けが難しく、その後も壁にぶち当たりまくりました。
また、解決策載せていけたらと思います。
簡易掲示板
こんばんは
1週間ほど前に簡易掲示板を研修で作ったので、記事を書こうと思いながらも時がたってしまいました。
今回はまぁこんな感じです。
入力した内容をサーバ上のCSVに保存していき、保存された内容をフォームの下部にCSVから読み取って表示していく感じです。
index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>簡易掲示板</title>
</head>
<body>
<?php $maxSize = 1014 * 1024 * 1; ?>
<form method="post" action="/hayama_test/board/done.php" enctype="multipart/form-data">
<p>■名前</p>
<input type="text" name="id" maxlength="15"><br>
<p>■タイトル</p>
<input type="text" name="title" maxlength="20"><br>
<p>■投稿内容</p>
<textarea style="margin-bottom:5px;" name="body" cols="32" rows="4"></textarea><br>
<p>■画像アップロード</p>
<input style="margin-bottom:5px;" type="file" name="upfile"><br>
<input type="submit" name="write" value="投稿">
<a style="text-decoration:none;" href="/hayama_test/board/download.php"><input type="button" name="download" value="CSVダウンロード"></a><hr>
</form>
<div style="background-color:#cccccc;">
<?php
require_once ("func.php");
show_bbs();
?>
</div>
</body>
</html>done.php
<?php
require_once ("func.php");
// 入力内容に空欄があるかチェック
if($_POST["id"] == "" || $_POST["title"] == "" || $_POST["body"] == ""){
echo htmlspecialchars("入力項目に空欄があります。");
exit;
}
// 画像がアップロードされたか調べる
if(isset($_FILES["upfile"])){
if($_FILES["upfile"]["error"] == 0){
save_img();
}
}
// 画像のファイルサイズ制限
if($_FILES["upfile"]["size"] > 1038336){
echo "ファイルサイズが上限を超えています";
exit;
}
// 入力された値を変数に格納
if($_POST["write"]){
$id = $_POST["id"];
$title = $_POST["title"];
$body = $_POST["body"];
}else{
echo htmlspecialchars("投稿失敗");
exit;
}
$img = "";
if($_FILES["upfile"]["name"] != NULL){
$img = "./imgfile/" . $_FILES["upfile"]["name"];
}
$line = array($id, $title, $body, $img);
// CSVファイルへ入力内容を保存
$file_name = "bbs.csv";
$fp = fopen($file_name, "r+");
if (flock($fp, LOCK_EX)) {
$csvtext = fread($fp, filesize($file_name));
ftruncate($fp,0);
rewind($fp);
$result = fputcsv($fp, $line);
fwrite($fp, $csvtext);
flock($fp, LOCK_UN);
}
fclose($fp);
if($result){
header("location: /hayama_test/board/index.php");
}else{
echo htmlspecialchars("失敗");
}
func.php
<?php
// アップロードされた画像の保存
function save_img(){
$tmp_file = $_FILES["upfile"]["tmp_name"];
if(!is_uploaded_file($tmp_file)){
echo "アップロードされたファイルが不正です";
exit;
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $tmp_file);
if($type != "image/jpeg" && $type != "image/png" && $type != "image/gif"){
echo "送信されたファイルが画像ではありません";
exit;
}
if(!move_uploaded_file($tmp_file, "./imgfile/" . $_FILES["upfile"]["name"])){
echo "アップロードに失敗しました";
exit;
}
}
// CSVファイルから内容を読み込む
function show_bbs(){
$fp = fopen("bbs.csv", "r");
flock($fp, LOCK_EX);
while($data = fgetcsv($fp, 10000)) {
$id = htmlspecialchars($data["0"], ENT_QUOTES,"UTF-8");
$title = htmlspecialchars($data["1"], ENT_QUOTES,"UTF-8");
$body = htmlspecialchars($data["2"], ENT_QUOTES,"UTF-8");
$img = htmlspecialchars($data["3"], ENT_QUOTES,"UTF-8");
$body = nl2br($body, FALSE);
if($data["0"] != NULL || $data["1"] != NULL || $data["2"] != NULL){
print_r("<p>■名前</p>");
print_r("<p style='margin-bottom:10px;'>$id</p>");
print_r("<p>■タイトル</p>");
print_r("<p style='margin-bottom:10px;'>$title</p>");
print_r("<p>■投稿内容</p>");
print_r("<p style='margin-bottom:10px;width:400px;'>$body</p>");
print_r("<p>■アップした画像</p>");
if($img != ""){
print_r("<div style='margin-bottom:10px;'><img src='$img'></div><br>");
}else{
print_r("<p>No image...</p>");
}
print_r("<hr>");
}
}
flock($fp, LOCK_UN);
}index.phpは見た目でdone.phpが実際にCSVに入力した値を保存したり変換したりしてるところで、
func.phpは今回は少ないですがユーザ定義関数をいれています。
csvの保存の仕方がエレガントではないって先輩に言われちゃいましたので、その辺はまた後日
説明しますー
そして、はてな記法がなかなかなれない。。。
FizzBuzz
こんばんは
今月から始めたブログもさっそく、さぼりがちですが更新です。
先週、初めて自分で組んだプログラムFizzBuzzのソース載っけておきます。
まず、FizzBuzzは海外の遊びで1から順番に数えていって
3で割り切れるときはFizz
5で割り切れるときはBuzz
3と5で割り切れるときはFizzBuzzって言っていく遊びらしいです。
まぁ世界のナベアツみたいなもんです。
今回のプログラムは入力した開始値から終了値までふぃずばずするようにしました。
index.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>fizzbuzz</title>
</head>
<body>
<form method="post" action="/hayama_test/fizzbuzz/fizzbuzz.php">
<p>開始値を整数で入力してください</p>
<input type="text" value="" name="num1"><br>
<p>終了値を整数で入力してください</p>
<input type="text" value="" name="num2">
<input type="submit" value="開始" name="start">
</form>
</body>
fizzbuzz.php
<?php
if (isset($_POST["start"])) {
$num1 = mb_convert_kana($_POST["num1"], "a", "UTF-8");
$num2 = mb_convert_kana($_POST["num2"], "a", "UTF-8");
if (ctype_digit($num1) == false || ctype_digit($num2) == false) {
echo htmlspecialchars("整数を入力してください");
}else{
if(isset($_POST["start"])){
$n = sprintf("%0d",$num1);
$m = sprintf("%0d",$num2);
if ($num1 > $num2) {
echo htmlspecialchars("開始値が終了値を超えています");
}else{
for($n; $n <= $m; $n++){
if($n % 3 == 0 && $n % 5 == 0){
echo htmlspecialchars("fizzbuzz¥n¥n");
}elseif($n % 3 == 0){
echo htmlspecialchars("fizz¥n¥n");
}elseif($n % 5 == 0){
echo htmlspecialchars("buzz¥n¥n");
}else{
echo htmlspecialchars($n."¥n¥n");
}
}
}
}else{
echo htmlspecialchars("やり直し");
}
}
}
今回はフォーム表示のindex.phpと実際に処理をするfizzbuzz.phpにわけました。
今回フォームのmethodとactionを覚えました。
<form method="post" action="/hayama_test/fizzbuzz/fizzbuzz.php">
POSTで値を渡すってのがコーディングにはない感じでなかなか難しい・・・
隠しフィールドなんて出てくると、また混乱しちゃうんで、早くphpの型ってのを
覚えていきたいですね。
プログラマー1週間
本日でプログラマーとして1週間経ちました。
今は参考書とリファレンスと毎日お友達です。
今までお問い合わせフォームのソースを見て理解するってのをやってたんですが、
これがなかなか難しい。
まぁ、理解したところもまだまだ理解できてないところもあるんですが、
とりあえず今日から自分で考えてコードを書き始めました。
本日作ったプログラムは「fizzbuzz」ってやつです。
結構有名みたいですが、なかなかおもしろかった。
処理内容は意外とぱっと思いついたんですが、実際書いてみるとなかなか動かないもんで
=と==間違えるっていう超初歩的ミスなんかもしてました。
そんなこんなで、ボタン押したら実行されるまでもっていけましたー
明日はテキストボックスに入力した値だけ、排出fizzbuzz排出するのと整数かチェックの判定もつけたいですね。
ソースは会社において来ちゃったんでまた、書き込んでおこう。