phpで適当にホームページを作ってみる。

## 心温まるイントロダクション

母さん！

「世界中のコンピューターの情報を画面に呼び出せるんだ」「それはすごいわね」
http://www.heartiness.co.jp/colum/c19960307.html

てな感じで1995年からWEBに参加していた私ですがなぜかある時期まで、phpを毛嫌いしていたんですよ。まあ若かったんでしょうね。htmlとプログラムが、ぐちゃぐちゃやないけ！許せる！(東映スパイダーマン)みたいな。みたいな。

んでいい加減いい歳になってきてからようやく抵抗がなくなってきて、なんだー、毛嫌いしてたけどphp便利じゃん、もうちょっと勉強するか。ってなってきたんですね。
そんなときに、急にちょっと、phpちょっとは齧ってますよ、みたいなアピールをしなきゃいけない感じになってですね。ちょっと、制作物をWEBに上げようかな、となったわけです。

## 期間限定無料レンサバを借りるべし。

あくまでも期間限定の制作物掲示が目的ですので、期間限定無料レンタルサーバー「エックスフリー」を利用します。
[無料レンタルサーバー【XFREE(エックスフリー)】](https://www.xfree.ne.jp/)

![2020-08-12-23-32-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/e5b04506-b619-a073-c3c3-5ba0e30199a4.png)

※ちゃんと自分のメールアドレスを入れてください。
![2020-08-12-23-36-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/ee9eb207-5888-6353-a66d-11d8b2c01a0e.png)

メール返信が来たら、【お申し込みURL】のリンクをクリックします。
![2020-08-12-23-39-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/ba2d5aea-7127-9d98-b330-31ecae74c1ad.png)

個人情報ちゃちゃっと入力していきます。
![2020-08-12-23-44-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/e6111179-6ed2-f994-41aa-11bd397eacf5.png)
![2020-08-12-23-49-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/10fa34bb-d717-4002-49d4-fdd97a3afb8d.png)

ユー適当にID決めちゃいなよ
![2020-08-12-23-52-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/8fbab509-3771-f926-46d2-e5bddf08e544.png)

んでここがミソなんですが、３種類のサーバが選べまして、今回の目的からしたらPHP・MySQLサーバを選ぶ必要があります。
![2020-08-12-23-56-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/edad322a-4c09-7583-c443-d453e8072943.png)

利用を開始すると、シンプルなコンパネからこんな感じのファイルマネージャーが使えるので、FTPソフト持ってない人はわざわざ入れる必要はありません。ローカルPCで書きなぐったPHPファイルをアップロードして、パーミッションを755にしてやってください。(なんならファイルマネージャー上で直接書いちゃっても可)
![2020-08-13-00-04-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/44a2d662-0466-0b1f-6e34-e26a1cf2abe3.png)

ちなみに、期間限定サーバといいながら、期間内に延長ボタンを押すとずっと使えます。
あと、無料サーバなんで、運営会社からの広告表示があります。

![2020-08-16_031435.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269237/7e015004-84aa-8963-d181-8347c0617f5b.jpeg)


## さっそくアップロード

こんな感じです「って、これだけじゃよーわからん(´･_･`)」
http://tabelog2001.php.xdomain.jp/index.php

## ではソースコードです(←アピールタイム)

### index.php
```php
<?php
$title='わくわく情報アイランド';

ob_start();
require 'header.php';
$contents = ob_get_clean();
echo $contents;

require 'rss.php';
require 'main.php';
require 'sub1.php';
require 'sub2.php';
require 'footer.php';
?>
```

### header.php
ヘッダ部分の出力には、index.phpで指定したタイトルを適用させています。

```php
<DOCTYPE html><html lang="ja"><head>
<meta content='width=device-width,initial-scale=1.0, 
minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>
<meta http-equiv="Content-Type"
 content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<link type='text/css' rel='stylesheet' href='style.css'>
<title><?php echo $title; ?></title>
</head><body>
<div id="container">
<div id="header"><h1><?php echo $title; ?></h1><hr></div>


```

### rss.php
なにかしらWEBアプリっぽい機能が欲しいなと思って、複数のサイトからRSSを取得してマージしてみました。

```php
<div id="rss">
<?php
 
//表示記事数
$hyojiNum = 30;
  
//フィード登録;
$data['feedurl'][] = 'http://feeds.japan.cnet.com/rss/cnet/all.rdf';
$data['feedurl'][] = 'http://www.vector.co.jp/rss/softnews.xml';
$data['feedurl'][] = 'https://srad.jp/slashdot.rdf';
$data['feedurl'][] = 'https://rss.itmedia.co.jp/rss/1.0/ait.xml';
$data['feedurl'][] = 'https://k-tai.watch.impress.co.jp/data/rss/1.0/ktw/feed.rdf';
  
$rssList = $data['feedurl'];
  
//同時呼び出し
$rssdataRaw = multiRequest($rssList);
for($n=0;$n<count($rssdataRaw);$n++)
{
    //URL設定
    $rssdata = simplexml_load_string($rssdataRaw[$n], 'SimpleXMLElement', LIBXML_NOCDATA);
    if($rssdata->channel->item) $rssdata = $rssdata->channel;
    if($rssdata->item)
    {
        $b_title=$rssdata->title;
        foreach($rssdata->item as $myEntry)
        {
            $rssDate = $myEntry->pubDate;
            if(!$rssDate) $rssDate = $myEntry->children("http://purl.org/dc/elements/1.1/")->date;
            date_default_timezone_set('Asia/Tokyo');
            $myDateGNU = strtotime($rssDate);
            $myTitle = mb_strimwidth($myEntry->title, 0,140, "…", "utf-8"); //タイトル取得
            $myLink = $myEntry->link; //リンクURL取得
            $outdata[$myDateGNU] ='<p>■<a href="' . $myLink . '" target="_blank">' . $myTitle .'</a>';
 
        }
    }
}

//ソート
krsort($outdata);

$nn = 0;
$html = '';

foreach($outdata as $outdata)
{
    $nn++;
    $html.= $outdata;
    if($nn == $hyojiNum) break;
}
 
echo $html;
  
//ここから同時呼び出し関数
function multiRequest($data, $options = array()) {
   
  // 配列を用意します。
  $curly = array();
  // data to be returned
  $result = array();
   
  //並列ファンクション
  $mh = curl_multi_init();
   
  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {
   
    $curly[$id] = curl_init();
   
    $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
    curl_setopt($curly[$id], CURLOPT_URL,            $url);
    curl_setopt($curly[$id], CURLOPT_HEADER,         0);
    curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
   
    // 投稿記事があるかどうか
    if (is_array($d)) {
      if (!empty($d['post'])) {
        curl_setopt($curly[$id], CURLOPT_POST, 1);
        curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
      }
    }
   
    if (!empty($options)) { curl_setopt_array($curly[$id], $options);}
    curl_multi_add_handle($mh, $curly[$id]);
  }
   
  $running = null;
// ハンドルを実行
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);
   
  foreach($curly as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
  }
   
  // ハンドルを閉じる
  curl_multi_close($mh);
   
  return $result;
}
 
?>
</div>
```

### main.php
この辺はただHTMLだけを書きなぐり。

```php
<div id="right">
<div id="main">
<p>
わくわく情報アイランドへようこそ！
</p>

<p>
このサイトは、↓の記事のサンプルページです。<br>
<a href="https://qiita.com/tabelog2001/items/1aaf9b40842581c2561d" target=top>
phpで適当にホームページを作ってみる。
</a>
</p>

<p>
＜更新履歴＞<br>
2020年8月12日　開設
</p>

</div>

```

### DBアクセス

#### 適当にテスト用のテーブルを準備

DBアクセス処理も入れてみようと、こんなテーブルを用意してみました。なんでも情報を放りこむメモテーブルというイメージで、テキストと、情報の種別を登録する。そこに、ニュースフィードを取得してるサイト名と、「最近読んだ本」のタイトルをごっちゃに登録。
ちなみに、DB操作もxfreeではコンパネからphpMyAdminが使えるので、特別なツールはいりません。

| name | kind|
|:-:|:-:|
|CNET Japan|1|
|バビロン大富豪の教え|2|
|Vector 新着ソフトレビュー|1|
|七つの習慣|2|
|スラド -- アレゲなニュースと雑談サイト|1|
|心と体の免疫力を高める最強習慣|2|
|＠IT|1|
|消費税凍結とMMTが日本経済を救う！|2|
|ケータイ Watch|1|
|死に山: 世界一不気味な遭難事故《ディアトロフ峠事件》の真相|2|

#### functions.php

DBアクセス用の関数を用意します。

```php
<?php
function memo_table_value(int $id)
{
  $dbcon = new mysqli('ホスト名', 'ユーザー名', 'パスワード', 'データベース名');

  if ($dbcon->connect_error) {
    echo "データベースに接続できません:" . $dbcon->connect_error;
    exit ();
  }

  $select = 'SELECT name FROM memo WHERE kind = ' . $id;
  $result = mysqli_query($dbcon, $select);
  foreach ($result as $col) {
    echo $col['name'] . "<br>";
  }
  mysqli_close($dbcon);
}
?>
```

#### sub1.php

DBアクセス用の関数を引数を与えて呼び出します。

```php
<div id="sub">
<p><strong>ニュースフィードは、以下サイトのRSSを取得しています。</strong></p>
<p>
<?php
require_once("functions.php");
memo_table_value(1);
?>
</p>
</div>
```

#### sub2.php

sub1.phpと同じくDBアクセス用の関数を呼び出します。

```php
<div id="sub">
<p><strong>最近のオススメ本です。</strong></p>
<p>
<?php
require_once("functions.php");
memo_table_value(2);
?>
</p>
</div>
```

### footer.php
```php

</div>

<div id="footer">
&copy 2020 わくわく情報アイランド
</div>

</div>
</body></html>
```


## 唐突に締め。

どんなプログラミング言語でもたいていそうですが、ちょっと試してみるか、ってなったときに、一番ネックになるというかめんどくさいのが、「開発環境の構築」です。

その点、PHPは「レンサバさえ借りれば環境構築完了」みたいなところはあります。最近のレンサバはPHP使えないところの方が珍しいくらいだし、ブラウザさえあれば、レンサバが提供するFTP機能だけでも開発可能だったりします。

今回のように、無料レンサバでサクッと十数分で環境を準備してPHPをお試ししてみるというのは、選択肢としてアリなんじゃないでしょうか。個人的にはお勧めです。以上。