phpexcelからphpspreadsheetに乗り換えたときのメモ

もういい加減「phpexcel」の部分を「phpspreadsheet」に置き換えようとざっくりとそのまま使いまわしして、調整したときに発生した問題をまとめてみました。

■調整事項

mergeCellsByColumnAndRow 1から始まるように変更
setCellValueExplicitByColumnAndRow 1から始まるように変更
Worksheet::getDefaultStyle() // PHPexcel時
$worksheet->getDefaultStyle(); 

// phpspreadsheet時
$worksheet->getParent()->getDefaultStyle();

 

以下のURLがPHPexcelからphpspreadsheetに乗り換えるときに参考になります。
https://phpspreadsheet.readthedocs.io/en/latest/topics/migration-from-PHPExcel/

kinstaでPHP7.4→8.1に変更してざっくりと速度を測定してみた

kinstaでPHP7.4→8.1に変更してざっくりと速度を測定してみました。

なんでざっくりかというとホームページを制作途中のため、ざっくりなページでで試してみましたw

ホームページの速度結果

PHPバージョン HTML読み込み終了までの時間
PHP7.4 1.25秒
PHP8.1 0.952秒

ざっくりと24%速度が改善しています。PHPバージョンを変更するだけでこれだけ改善します。計測用に何度も行ったわけではないのでご参考までに。

※Chromeのデベロッパーツールで計測しました。

アクセス速度を改善したい場合はこれはやるべき事項ですね。

 

PHP7.4 vs PHP8.1をエックスサーバーで試してみた。

PHP8.1の効果が2022年11月9日時点で効果が確認できかなったので結果掲載はやめました( ;∀;)

「エックスサーバーで運用するときは最新且つ推奨のPHPバージョンを利用しているのがよい!!」

 

という本日の結論でした。時代とともに変わると思いますが・・・。

 

とりあえず、エックスサーバーでワードプレスを運用中の方はPHP7.4で今のところ行きましょう!

ZenlogicサーバでPHPファイルの変更が反映されるのに時間がかかる

ZenlogicサーバーではPHPファイルのキャッシュがきついようだ。

どうにもならなかったので、Zend OPCacheを停止してみた。

 

.htaccess

php_flag opcache.enable Off

 

 

でいいかなと思ったんだけどダメ。WordpressのテーマなどのPHP更新して操作するとサーバーエラーがでる。(再読み込みすると消える)使いにくい。

 

ざっくりとCENTOS8、PHP7.4でLaravel 7を始めてみます。

PHP frameworkの「Laravel 」をざっくりと初めて見たいと思います。

 

ざっくりなのでまずはインストールをします。

 

OSの準備Centos8をインストールしてSELINUXを無効化しておきます。

SELINUXは無効で。再起動後の処理っす。

 vi /etc/selinux/config
 SELINUX=disabled

 

あやまって、「SELINUXTYPE=disabled」って記述してしまうのは私ぐらいだろうか…きっとこの時、あーめんどーって感じで記述してしまうんだろうなきっと・・・。

 

 

Laravelのインストール手順

PHP7.4をインストールする。手順としては↓の感じphp -vで7.4になっていることを確認。

# EPELリポジトリを追加
dnf -y install epel-release


# Remiリポジトリを追加
dnf -y install http://rpms.famillecollet.com/enterprise/remi-release-8.rpm

# PHP 7.4 インストール
dnf -y module install php:remi-7.4

# PHP拡張機能インストール
dnf install -y php-bcmath php-mcrypt php-pdo php-xml php-tokenizer php-mysqlnd php-pecl-xdebug php-gd php-intl php-zip php-opcache

php -v

 

Composer のインストール

# インストーラーのダウンロード
wget https://getcomposer.org/installer -O composer-installer.php

# インストール
php composer-installer.php --filename=composer --install-dir=/usr/local/bin

# ねんのためアップデート
composer self-update

 

 

次に「laravel」をインストールする

composer global require laravel/installer

# bash_profileにパスを追加
vi ~/.bash_profile

# PATH=「$HOME/.config/composer/vendor/bin」を追加
PATH=$PATH:$HOME/bin:$HOME/.config/composer/vendor/bin


# .bash_profileを読み込む
source ~/.bash_profile

 

これでlaravelの利用準備が整いました。

 

projectの作成

プロジェクトを準備します。プロジェクトごと1アプリです。

laravel new [project_name]

※どこに設置するのか考えて行います。

 

「storage」と「cache」にWEBサーバーからの書き込みができる費用がある

chown -R apache:apache [プロジェクトパス]/storage
chown -R apache:apache [プロジェクトパス]/bootstrap/cache

 

公開フォルダは「public」になるように設定します。

 

その後、ブラウザでアクセスすると下記のように表示されます。

 

そーいえば、初期ページ以外でコントローラ―を追加してnot fundとなった場合は

WEB側の設定(httpd.conf等)で「AllowOverride All」とすれば可能だと思う。

 

■メモ

ルート情報:routesの中に格納

view系:「resources」>「views」の中

コントローラ―:コマンドで作成する。「app」>「http」>「Controllers」のフォルダの中。

※php artisan makecontroller コントローラー名

 

コントローラ―を追加した場合は「ルート情報にコントローラ―情報を追加」する

 

■コマンド

・ルーティング定義の一覧を表示します。

 php artisan route:list

 

 

 

 

 

 

VIMEO APIを試してみる

PHPからVIMEO APIの接続を試してみます。

 

VIMEO SDK

https://developer.vimeo.com/api/libraries

 

リファレンスの中を見るとテストができるのでそこで試してみてもいいかも

 

https://developer.vimeo.com/api/reference

APIでアクセスするためにアプリを作る

https://developer.vimeo.com/apps

※アップロードにはアプリを作った後に申請しないといけなくてこれが5日間程度かかると思ってよい。営業日ベースなら1週間って感じ。長いよ~~。

 

とりあえず、自分自身の情報を見てみる

<?php
require 'vimeo.php/autoload.php';
use Vimeo\Vimeo;
$client_id = 'xxxxxxxxxxxxxx';
$client_secret = 'xxxxxxxxxxxxxx';
$access_token = 'xxxxxxxxxxxxxx';

//Vimeoに接続
$lib = new \Vimeo\Vimeo($client_id, $client_secret, $access_token);

//自身の情報を取得
$user = $lib->request('/me');
echo '<pre>';
print_r($user);
echo '</pre>';
?>

 

って実行したらエラー「 syntax error, unexpected ‘?’ in /vimeo.php/src/Vimeo/Vimeo.php on line 163」およよ??

163行目の?stringは、PHP7.1以上で有効だったよ。?をとってみたらOK。まあ、PHP7.0でテストするのもどうなのかと思って、PHP7.1に変更してみた。

public function getToken(): ?string
↓
public function getToken(): string

 

とりあえず戻り値の最初は

Array
(
    [body] => Array
        (
            [uri] => /users/xxxxxx
            [name] => xxxxxx
            [link] => https://vimeo.com/userxxxxxxxxx
            [location] => 
            [bio] => 
            [short_bio] => 
            [created_time] => 2020-02-26T09:50:36+00:00

 

ってなところ。

 

自分自身のアカウント情報:$lib->request(‘/me’);

自分自身のビデオリストを取得:$lib->request(‘/me/videos’)

 

ってできる。

 

アップロードできるのかな?

APIのページを参考に…https://developer.vimeo.com/api/guides/videos/upload

 

APIをインストール。これでやらないと、必要なものを自分で集めるのが大変!!

composer require vimeo/vimeo-api

 

あとは、APIドキュメントページを参考に記述すればアップロードまで完了!!

 

以外とここまでは簡単だった。

 

操作として

1.アップロード

2.設定の変更

となるようだ。

 

 

プライバシー設定メモ

・VIMEO.COMで非公開

$client->request($uri, array(
  'privacy' => array(
'view' => 'disable',
  ),  
  
), 'PATCH');

 

コメント禁止

'comments'=>'nobody',

 

 

どこの動画に埋め込みを許可しますか?の設定メモ

 

リファレンスによると

$client->request($uri . '/privacy/domains/example.com', 'PUT');
$client->request($uri, array(
  'privacy' => array(
    'embed' => 'whitelist'
  )
), 'PATCH');

echo $uri . ' will only be embeddable on "http://example.com".';

 

って感じです。

 

PUTでドメインを追加して、この動画は、特定のドメインからだけだよ==って感じ。

 

えーと、このあたりは「https://developer.vimeo.com/api/reference/videos#embed-privacy」も参考にしておく必要がある。

 

で、ドキュメント通りに行っても動かん!!ってはまりました。

 

まず、1行目のドメインを追加する箇所を実行したときにレスポンスが「[status] => 405」」だと。ちなみに[Allow] => PUT,DELETE,OPTIONSって言われています。なのでPUTできていない。

 

APIのコードを読む限り、requestのパラメーターって3番目がMETHODの指定。おろ?ドキュメントは2番目。

request($url, $params = array(), $method = 'GET', $json_body = true, array $headers = array()): array

 

じゃあ、2番目のパラメーターをarray()で処理してみた。

 

 $client->request($uri . '/privacy/domains/example.com', array(),'PUT');

 

こんどは、[status] => 400 で戻ってきたぁ。

で、今度はエラーメッセージあり。[error] => The video\’s embed privacy isn’t set to specific domains.

whiteリスト対応になってないっぽい。それなので、順番を動画をwhitelistに対応にしてからドメインを追加してみた。

 

そしたら[status] => 200 でwhitelistに追加できた。めでたしめでたし。

 

 

 

プレイヤーを試してみる

特定のドメインだけをしている場合にWordPressの管理画面で動画を見ようとすると…

「大変申し訳ございません」って見れない…

 

VIMEO HELPを見ると

 

設定にドメインがリストされているにも関わらずエラーが引き続き表示される場合は、アドレスバーで指定されているドメインがVimeoプレーヤーに送信されたドメインと異なる場合があり、この場合プライバシーに関するエラーが表示されます。
リファラーがプレーヤーのiframeに到達できないよう、サイトのHTMLコードがブロックしている可能性がないかウェブデベロッパにお問い合わせください。

 

えーと、iframeを読み込むときにリファラーを送っていないんだと。。

 

では実際に…

 

・再生可能な場合

 

・再生不可能な場合

 

リファラーがいません。WordPressさん。。。

ということでmetaでリファラーすればきっと表示。

 

プレイヤー回りのカスタマイズ

「動画」>「プリセットを埋め込む」で新規作る。

PlayerのAPIで埋め込み指定するよりもこっちで指定したほうが良い。ロゴ削除や変更も可能だし

PHP:Cannot use a scalar value as an array

PHPでたまにおやおやっていうエラーを出してしまったときのメモ。

 

エラー内容「Cannot use a scalar value as an array」

翻訳すると「スカラー値を配列として使用できません」

 

え?っと、、、

 

ちゃんと変数の内容を追ってみるとわかると思いますが、

例えば:X=1としておいたのに途中からX[‘id’] =12345ってしているケースに発生します。

 

たぶん、最初は値を入れておけばよかったのですが後ほどで配列しなければならないっていうときに発生させてしまう。エラーです。

 

オレ(1)、Xっていう変数に入っていていっぱいなのに、勝手に配列ってして拡張されてオレ(1)はどうしたらいいんだ??っていう感じです。

 

 

McAfeeウェブアドバイザーに信用サイトを追加する

McAfeeのウェブアドバイザーでダウンロードファイルがブロックされるなど予期しない動作が発生した場合は下記の手順で信用サイトに対象サイトを追加して利用することが可能です。

※不用意に信用サイトを追加しないほうが良いです。

 

手順:インターネットエクスプローラーの場合

(1)「ツール」>「マカフィー ウェブアドバイザー」をクリックする

(2)信用サイトを追加する

ウェブアドバイザー_ie

 

手順:Firefoxの場合

(1)マカフィーのアイコンをクリック→「オプション」をクリックします。

ウェブアドバイザー_firefox

(2)信用サイトを追加する

※インターネットエクスプローラーと同じ。

 

 

 

 

Fuelphpでメール送信時にメールサーバーへ接続できないなどのエラーキャッチ

Fuelphpでメール送信時のエラーキャッチを「EmailValidationFailedException」「EmailSendingFailedException」だけでよいのかなって思っていたけど、SMTPサーバーに接続できないときの例外エラーはキャッチされなかった。

 

っということでメール送信時に

$email = Email::forge(array(必要な内容を記述));
try
 {
     $email->send();
 }
 catch(\EmailValidationFailedException $e)
 {
    // バリデーションが失敗したとき
    echo  = 'メールアドレスが正しくないため送信できませんでした。:'.$e->getMessage();
 }
 catch(\EmailSendingFailedException $e)
 {
    // ドライバがメールを送信できなかったとき
    echo 'メール送信に失敗しました。:'.$e->getMessage();
  } catch (\Exception $e) {
    echo = 'メール送信時のその他のエラーが発生しました。:'.$e->getMessage();
 }

 

「Exception」をcatchを付けてそれ以外のエラーをキャッチすることにした。

 

どのクラウドサービスだって停止することあるんだから、SMTPサーバーへのConnectエラーも考慮しなければならない。

 

初期のままSMTPを利用していると

「ot an unexpected response from host on command: [MAIL FROM:<メールアドレス>] expecting: 250 received:」

となってメールが送れなくなる

以下のようにemailドライバーのSMTPの部分を修正したほうが安全

https://github.com/fuel/email/commit/2eab3974e4c38b9fea0a7ebbad3d4e1f20076448