twig で配列の数をカウントする
ちょっと検索しただけでは分からなかったので。 ほとんど参考サイトのコピペですが。
{% if my_list|length > 10 %} ... {% endif %}
ubuntu に samba を入れる
もう少し簡単にファイル共有できないかと思い、 ubuntu に samba を入れてみました。
いつも通り、 apt-get を使います
$ sudo apt-get install samba
共有するディレクトリを作成し、 だれでも読み書きできるようにオーナー、権限を設定します。
$ sudo mkdir /var/samba $ sudo chown nobody:nogroup /var/samba $ sudo chmod 777 /var/samba
/etc/samba/smb.conf をエディタで開いて設定します。
[global] workgroup = WORKGROUP dos charset = CP932 # Windows 側の文字コード unix charset = UTF-8 # Linux 側の文字コード map to guest = Bad User # Linux に存在しないユーザーでのアクセスはゲストとして扱う [share] path = /var/samba # さっき作ったディレクトリ writeable = yes # 書き込み許可 force create mode = 0666 # ファイルを作った時の権限 force directory mode = 0777 # ディレクトリを作った時の権限 guest ok = yes # ゲストアクセスを許可 guest only = yes
設定したら再帰動します。
sudo service smbd restart
これで接続できました。
ubuntu に Symfony2 をインストール
Symfony2 を ubuntu にインストールした時のメモ
まず、 Symfony を落としてきて展開
mkdir ~/temp cd ~/temp wget http://get.symfony.com/Symfony_Standard_Vendors_2.3.1.tgz tar -zxvf Symfony_Standard_Vendors_2.3.1.tgz sudo mv Symfony /var/www
で http://hostname/symfony/web/app_dev.php にアクセス。 以下のエラーが出たので、 app_dev.php を修正します。
You are not allowed to access this file. Check app_dev.php for more information.
sudo vim /var/www/Symfony/web/app_dev.php
app_dev.php はローカルからのみ接続できるようになっています。 今回は開発用に他マシンからも接続するので、 以下の行をコメントアウトします。
# if (isset($_SERVER['HTTP_CLIENT_IP']) # || isset($_SERVER['HTTP_X_FORWARDED_FOR']) # || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) # ) { # header('HTTP/1.0 403 Forbidden'); # exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); # }
再びブラウザからhttp://hostname/symfony/web/app_dev.php にアクセス
RuntimeException: Unable to create the cache directory (/var/www/Symfony/app/cache/dev)
エラーが出たので権限を変更します
chmod 777 /var/www/Symfony/app/cache
さらにブラウザでチェックすると エラーが出たので権限を変更します。 UnexpectedValueException: The stream or file "/var/www/Symfony/app/logs/dev.log
chmod 777 /var/www/Symfony/app/logs
これで正しく表示できるようになりました。
ubuntu の Apache で Userdir を使えるようにする
デフォルトでは各ユーザの ~/public_html にアクセスできないようなので 設定を追加しました。
cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/userdir.conf userdir.conf sudo ln -s ../mods-available/userdir.load userdir.load
apache を再起動します。
sudo service apache2 restart
public_html ディレクトリを作って 確認用の html をコピー。
mkdir ~/public_html cd ~/public_html cp /var/www/index.html .
ブラウザから http://<サーバ>/~<ユーザ名> にアクセスして 表示されれば OK です。
MySQL を外部接続できるようにする
前回で MySQL をインストールしましたが、 外部から接続するために設定が必要だったのでメモ。
まず、普通に接続しようとすると以下のエラーメッセージが出ました。
SQL Error (2003) Can't connect to MySQL server
で、設定ファイルを編集します。
sudo vim /etc/mysql/my.cnf
↓この bind-address の行をコメントアウトします。
# bind-address = 127.0.0.1
編集したら再起動
sudo service mysql restart
で、外部から接続テストすると
sql error 1130 host is not allowed to connect to this mysql server
なエラーメッセージが。 まだ権限付与しないとダメらしいので コマンドラインから接続して設定します。
mysql -u root -p mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%' IDENTIFIED BY 'root のパスワード' WITH GRANT OPTION;
これで他ホストから接続できました。
IP address 'XXX.XXX.XX.XX' could not be resolved: Name or service not known
ただ、以下のようなワーニングが出て気になったので設定した。 /etc/mysql/my.cnf に
skip-name-resolve
を追加したら OK でした。
PHP で簡易 Enum を実装する
php では java のように enum 型がないのですが、 やはり使いたい場合があります。
本格的に実装してもいいのですが、 そこまでするのも大げさだなぁ、という場合に リフレクションを使って簡単に実装する方法があります。
<?php trait SimpleEnum { public static function values() { $className = get_called_class(); $refClass = new ReflectionClass($className); $values = $refClass->getConstants(); return $values; } public static function valueOf($value, $notfound = null) { $values = self::values(); if (!array_key_exists($value, $values)) return $notfound; return $values[$value]; } }
使い方
<?php class TestEnum { use SimpleEnum; const HOGE = 0; const FUGA = 1; } echo TestEnum::HOGE; // => 0 echo TestEnum::FUGA; // => 1 echo TestEnum::valueOf('FUGA'); // => 1 echo TestEnum::valueOf('UnDefined'); // => null echo TestEnum::valueOf('UnDefined', 'undefined'); // => undefined
java みたく複数の値を定義したり、型検証できませんが、 ちょっと使う分にはこれでもいいかと。
trait を使ってますが、 class にして継承すれば 5.3 以下でも使えると思います。
ubuntu に php の開発環境を入れる ~ apache から jenkins まで ~
ubuntu に php の開発環境を作ったのでメモ。 ubuntu のバージョンは 13.04 です。 他の OS から ssh 経由で操作しています。
apache のインストール
$ sudo apt-get install apache2
で OK です。 動作確認は
$ ifconfig
して、ブラウザからその IP にアクセスして "It works!" と表示してれば OK
php のインストール
$ sudo apt-get install php5 libapache2-mod-php5 $ sudo echo "<?php phpinfo(); | sudo tee /var/www/phpinfo.php > /dev/null $ sudo apt-get install php5 libapache2-mod-php5 $ sudo apt-get install php5-mysql
ブラウザからさっき調べた IP/phpinfo.php にアクセスして表示される事を確認します。
例: http://192.168.12.34/phpinfo.php
MySQL のインストール
次に MySQL をインストールします。
$ sudo apt-get install mysql-server
途中で root ユーザのパスワードを聞かれるので設定します。 インストール終了後、以下のように表示されれば OK です。
$ mysql -u root -p mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)
phpunit のインストール
phpunit をインストールしますが、その前に pear を入れる必要があります。 以下のコマンドを入力します。
$ sudo apt-get install php-pear $ sudo apt-get install phpunit
動作確認は以下のコマンドを入力してバージョンが表示されれば OK です。
$ phpunit --version
jenkins のインストール
最後に jenkins をインストール。
$ sudo apt-get install jenkins
またブラウザから 8080 ポートにアクセスして おじいちゃんの顔が見えれば OK 。