Tag phpを表示しています。
2019.10.24 木
PostgreSQLにリモートホストから接続する方法です。インストール時のデフォルトではlocalhostのみの接続ができるようになっていますが、リモートホスト側の設定はされていません。 リモートホストからDBサーバーへのネットワークの確認 まずはリモートホスト側からDBサーバーへアクセスしてみます。nmapなどで通信自体とポートの確認をしておきます。 PortチェックテストのようなWEBツールもあります。 $ nmap TARGET_HOST ... 5432/tcp open postgresql ... 疎通できない場合は複数の原因が考えられるので、Firewallの設定やPostgreSQLのサービスの起動などいろいろ確かめる必要があります。今回この部分は割愛。 postgresql...
2019.10.24 木
PostgreSQLに接続する postgresqlに接続するモジュールが入っているか確認してください。 # php -m | grep pg pdo_pgsql pgsql ここらが入っていたらOKです。通常デフォルトでインストールされているので問題ないでしょう。 もっともプレーンな方法で接続してみます。 <?php echo "try to connect postgresql.\n"; $DBHOST = "127.0.0.1"; $DBPORT = "5432"; $DBNAME = "voyager"; $DBUSER = "voyager"; $DBPASS = "LyrxXVB9"; try { $dbh = new PDO("pgsql:host=$DBHOST;por...
2019.9.16 月
php artisan tinkerを実行すると以下のようなエラーで実行できないことがあります。 In Configuration.php line 363: [ErrorException] mkdir(): Permission denied -vvvvをつけて、デバックモードでコマンドを実行してみます。 $ php artisan tinker -vvvv In Configuration.php line 363: [ErrorException] mkdir(): Permission denied Exception trace: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() at n/a:n...
2019.9.16 月
CentOS7でapacheを動かしている環境です。PHPは7.2.17で動いています。 laravel5でtinkerを実行すると以下のようなエラー(Warning) $ php artisan tinker PHP Warning: Module 'ssh2' already loaded in Unknown on line 0 ssh2が二重に読み込まれているっぽいので、エクステンションの部分を検索してみる。/etcあたりを検索。 $ find ./etc -type f | xargs grep "ssh2.so" ./php.d/ssh2.ini:extension=ssh2.so ./php.d/20-ssh2.ini:extension=ssh2.so どっちかが無駄っぽい気...
2019.3.28 木
maatwebsite/excelっていうパッケージがあってLaravelで開発するぶんには何もしなくてよいです。 https://github.com/Maatwebsite/Laravel-Excel https://packagist.org/packages/maatwebsite/excel インストール インストールします。(2019-03-28現在の最新版は3.1.10でした) php composer.phar require "maatwebsite/excel:~3.1.10" 後述しますが、3系のパッケージは読み込みの機能がなくなったようです。(前回の方々がなんで?って言ってます) ですので、エクセルの読み込み機能が必要なときは2系のパッケージをインストールしないと駄目...
2019.3.25 月
docker-compose.ymlで以下のように設定します。 .... phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=SET_PASSWORD links: - mysql ports: - 8080:80 volumes: - /sessions 最終的にはこんなようなカタチになります。 version: '3' services: wordpress: image: wordpress:latest ports: - "3001:80" environment: WORDPRESS_DB_NAM...
2019.3.23 土
WordPressの環境はもう年間何回作ってるんだといった感じで、WEBのサービスとしてはかなりメジャーになってしまいました。 $ docker pull wordpress $ docker pull mariadb docker-compose.ymlを作成してプロジェクトディレクトリ直下においておく。 記述は以下のようにします。ちょっと解説すると、mysqlのデータベースとWordpressrをつなぐので、DB名とユーザー名とパスワードは同じものを設定します。同じものであれば任意の設定で構いません。 docker-compose.yml version: '2' services: wordpress: image: wordpress:latest ports: - "3001:80...
2019.3.20 水
リダイレクトはかなり便利になってます。これはヘルパー関数になるのだと思われ。 普通のリダイレクトはこのような形になります。http://example.com/page/indexにリダイレクトされます。 return redirect('page/index'); https://blog.capilano-fw.com/?p=566
2019.1.7 月
WordPressのアクションフックの話なので特に説明も何もないんですが備忘録して。 今回の趣旨はマニュアルや資料をWordpressを使ってコンテンツを整理しておきたく、また資料はmdで保存しておきたいというのがありました。このブログもそうですが、手順書やマニュアルといったものは過去の履歴を含めて保存しておきたいのですが、Wordpressのリビジョン機能は履歴のバージョン管理ではないので、厳密な管理ができない。ですのでファイルで出力しておいてWordpressのコンテンツごとファイルでその履歴を管理してやろうという魂胆です。バックアップにもなる。 また今回はMarkdown変換のプラグインにJP Markdownを利用しています。 WordPressの記事保存時のアクションフック フック...
2019.1.3 木
これは案外難しい。ちょっと考えただけでは駄目でした。 例にある通りだと以下のようになり、英数字のハッシュタグは所定のアンカーリンクに変換できます。 $test = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;])#(\w*[a-zA-Z_])/u", "<a href=\"http://search.twitter.com/search?q=\\1\">#\\1</a>", $test); これに数字と日本語を加えると $textarea = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;])#(\w*[a-zA-Z_0-9ぁ-んァ-ヶ\x{3005}\x{3007}\x{303b}\x{3400}...
2019.1.2 水
Parse error: syntax error, unexpected '?' in ... PHPのバージョンが古い疑い。php5.3とか使って新しいフレームワーク使おうとしているとか。
2018.12.24 月
Laravelのキャッシュシステムは抜群に使いやすくなっているのでほとんどの場合使うことになると思います。PHPそれ自体でキャッシュを使う場合はroot権限相当で多くの作業が必要なのですが、Laravelはそこらあたりをとても簡単にまとめてくれています。ベンチマークはとっていないので実際速いのかどうかという問題はあるかもしれないですが、比較的小規模なwebアプリの場合はほとんど問題のない速さで使えています。 キャッシュの種類はたくさんあって必要なキャッシュシステムはすべてサポートしています。また裏側のキャッシュシステムがどうあれLaravel上でのキャッシュ扱い方は非常に容易です。 apc PHPのあのキャッシュ array ただ配列にぶっこむだけ Redis う、玄人っぽい(というかちゃん...
2018.12.19 水
PhpStormの日本語化(Windows環境・Pleades利用) Download PhpStorm 【PhpStorm】無料でPhpStormをインストールする方法 PhpStormの使い方
2018.12.10 月
コマンドクラスの作成 コマンドのクラスを作成します。 php artisan make:command monitorAppStatus app/Console/Commands/monitorAppStatus.phpが作成されます。 このクラスをartisanで実行するためにはこのクラスファイルの$signatureを書き換えます。 protected $signature = 'command:name'; ↓ protected $signature = 'monitor:app'; これでphp artisan monitor:appで実行できるようになります。 コマンドの中身を作成 コマンドの実際の中身の作成は、このクラスファイルのhandle()部分に書きます。 public ...
2018.11.14 水
これやたらとよく使うけど毎回忘れる。 $title_count = mb_strlen($title,"UTF-8"); $title = $title_count < 20 ? $title : mb_substr($title, 0,20)."..."; タイトルの文字数が20文字以下だったらそのまま出力。20文字以上だったら20文字に丸めて「…」をつけて出力。
2018.11.13 火
設定ファイルのデフォルトの状態のバックアップは必ずとっておく。 # cp -p /etc/php.ini /etc/php.ini.org Error表示関連 画面にエラー表示をする display_errors = Off ↓ display_errors = On たぶんデフォルトのままでよし。 error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT /var/log/httpd/errorあたりのログに出力するやつ。たぶんデフォルトのままでよし。 log_errors = On php関連のエラーログを有効にする ;error_log = php_errors.log ↓ error_log = php_errors.lo...
2018.11.8 木
とかいうタイトルですが普通にhttpプロトコルでリクエスと投げてレスポンスが返ってくるというだけの話です。RESTという観点で言えば認証のところがちょっとおもしろいというだけです。いわゆるあのRESTFULLでセッションを持たないという考え方です。それ以外は別に特に何も考えなくていいです。 ルーティングとエンドポイント APIのエンドポイントの設定です。 Route::get('/foobar/search/standard', function(){ echo "foobar"; }); “/foobar/search/standard”にアクセスしたら、Laravelはデフォルトで”/api/foobar/search/standard”が...
2018.10.30 火
つまりはもうフルスクラッチでなんかかけませんということなのです。 Composer Composerの入手 curlがあると楽。 $ curl -s http://getcomposer.org/installer | php 何もない場合は、 Download Composerから入手。 このコマンドのどれかで落ちてくると思います。 $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8...
2018.10.24 水
PHP7でOracleに接続するでPHP7からの接続はできるようになりました。 LaravelでOracleを使うときの具体的な手順を解説します。 パッケージのインストール 必要なパッケージはこれ。 – Packagist: yajra/laravel-oci8 – Github: yajra/laravel-oci8 $ php composer.phar require yajra/laravel-oci8:v5.7.2 どうやらこれだけで動くっぽいです。 Databese接続パラメータの設定 例によってconfig/database.phpに設定します。Oracleはデフォルトで設定項目がない(配列に入っていない)ので自分で追加してあげる必要があります。 'co...
2018.10.23 火
oci_connect()はデフォルトのPHPには含まれていない関数なのでoci8とpdo_ociのインストールが必要です。 Instant Client18.3 oci8 pdo_oci オラクルクライアント(Instant Client)のインストール まずは普通にコマンドラインからつながるようにしておきます。どっちにしろ開発で使うので。 Oracle Instant Client mysqlとかだったら特にクライアントとか意識せずにClientとRemoteの両方のマシンにmysqlをインストールしてしまえばいいんですが、Oracleは面倒です。まずはOracle Instant Clientでsqlplusでもってコマンド上でログインして操作できるようにしてみます。 Instant ...
2018.10.22 月
Search Everything デフォルトの検索機能に加えて記事内の言葉に検索ワードがヒットするので、これをインストールしてやっと満足のいく検索機能になる感じです。ヒットしたワードにマーカーがつくのでとてもわかりやすいです。 有効化するとデフォルトの検索機能に勝手に機能拡張が行われるので特に何もする必要なしです。 https://ja.wordpress.org/plugins/search-everything/ Crazy Bone ログインしたIPを記録してくれるプラグインです。セキュリティーと管理を強化するプラグインです。 Crazy Bone JP Markdown 記事をマークダウンで記述できるプラグインです。 JP Markdown WordPress Popular Po...
2018.9.6 木
もうAPPサーバーみたいな使い方になってます。私個人の中では。 Apacheのインストール まずはインストール。SSLは今どき必須みたいなところがあるので入れておくけど、ポリシーによってAPPサーバーとしてlocalhostみたな感じで使うのだったら不要。 yum -y install httpd yum -y install mod_ssl 自動起動の設定 enableになっていればOK systemctl enable httpd.service systemctl list-unit-files 起動 systemctl start httpd.service 基本設定 バックアップとってから設定はじめよう。 cp -p /etc/httpd/conf/httpd.conf /etc/...
2018.7.2 月
Twitter Appの基本設定 Packagist: themattharris/tmhoauth Github: themattharris/tmhOAuth TwitterのAouth認証でthemattharris/tmhoauthライブラリーを使います。composer.jsonに一行加えてcoomposer updateしておきます。(または、composer require themattharris/tmhoauth)LaravelとかSymfonyとかだったらこれでAutoloadされているのでOKです。プレーンのPHPの場合は自身でrequireしてください。 "require": { ... "themattharris/tmhoauth": "^0.8.4", ......
2018.6.22 金
普通のページでも異常なアクセスをある程度検知してアクセス不可にしておきたいと思って簡易的なもの作りました。 Laravelのログインスロットルをそのまま使ってもよかったのですが、ここではわかりやすくミドルウェアでちょろっと書いた感じです。 基本はリクエストの根っこのところでIPをとって、30秒の間に30回以上のアクセス(だいたい1秒に1回のアクセス)があったら403に飛ばします。コンテンツや好みに応じてパラメータを適当に調整してください。 あと.envで設定するときは、 ## Throttle THROTTLE_KEEP_TERM=0.5 THROTTLE_LIMIT=30 こんな感じで設定も可能です。 Source php artisan make:middleware Throttle ...
2018.6.19 火
ミドルウェアというややこしい用語のせいで皆混乱気味です。Apacheはおっさんにしてみればミドルウェアだからです。(厳密にいえば名前空間が必要です。) Laravelのミドルウェアはちょっと語弊があるかもですが、アプリケーションに投げられたリクエストを各コントローラに渡す前に処理するときに使います。いわゆるフィルタリングの機能です。 リクエストの初期段階の処理をするのに向いています。 Laravel 5.6 リクエストのライフサイクル ミドルウェアの使い方 コマンドで作るのが楽です。 php artisan make:middleware Foobar app\Http\Middleware\Foobar.phpが作成されます。 <?php namespace App\Http\Mid...
2018.5.31 木
Laravel5 共通クラス(汎用関数)をつくるでは比較的少量の場合というか基礎的な考え方みたいなものなので実践ではあまり役に立たない場合が多いかも。大きなアプリケーションになってくるとこれだと全然足りないわけです。 なのでここではサービスプロバイダーとして複数のクラスを一括で共通で扱える方法を紹介します。 HelperServiceProviderの作成 サービスプロバイダーを作成します。 php artisan make:provider HelperServiceProvider 作成したHelperServiceProviderのregisterメソッドを以下のようにします。 public function register() { foreach (glob(app_path()....
2018.5.25 金
いろんな方法があるので、あれなんですが、こういう方法がいちばん簡潔。 $someObj = new someClass(); $someObj->{"foo"} = "hoge"; これで追加される。
2018.5.14 月
これらのライブラリは普通のプレーンなPHPでも使えるので重宝しますよ。 jenssegers/agent Mobile Detectのラッパーなんですが、Mobile Detectより人気ある感じになっちゃってますか。これ。 https://packagist.org/packages/jenssegers/agent https://github.com/jenssegers/agent monolog/monolog 普通のPHPでも便利。 https://packagist.org/packages/monolog/monolog https://github.com/Seldaek/monolog nesbot/carbon 時間計算は絶対に使うでしょ。だいたいのアプリで。 http...
2018.5.12 土
PHPもセキュリティーがしっかりしてきました。 文字列をハッシュ化する .... use Illuminate\Support\Facades\Hash; .... class someClass { $h = Hash::make("foo"); } 最低限これだけで大丈夫。暗号化したものを保存しておけばよいです。 パスワードを照合 どうしていつの時代になってもパスワードを復号化するって思っている人多いんですかね。 $boolen = Hash::check('foo', $h); 照合できたら1、それ以外は空を返します。 Laravel 5.6 ハッシュ http://www.kaasan.info/archives/3723
2018.5.1 火
いろいろと複雑且つ難しい方法はさておき、 $url = $request->url(); これで純粋にURL取得。 $url = $request->fullUrl(); これでGETクエリまでを含めたすべての値が取得できます。 あとは何か適当に加工すればよいかと。 リクエストの取得