PHP-8.1 on Ubuntu-22 で composer をインストールしようとした時の事。
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" PHP Warning: copy(https://getcomposer.org/installer): Failed to open stream: Connection timed out in Command line code on line 1
PHP での copy() でタイムアウトしてる?
curl とか wget なら問題ないから、
allow_url_fopen とか allow_url_include とか、PHP 関連かと思って色々試しても全然解決できない。
なんかクラウドの環境の依存かなとかホスティングかなとか、散々困った挙句、結局以下で解決。
# echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
なんでこれで解決するの
以下は同等の値を代入する。
var hoge = document.getElementById("hoge");
var hoge = $("#hoge").get(0);
var hoge = $("#hoge")[0];
近頃のブラウザーのJavascriptエンジンは大体trim関数に対応しているので、以下のようにできる。
var str = " abc "; var trimmed_str = str.trim();
もし古いブラウザのサポートとかでtrim関数が無い場合は、代わりに replace を用いて文字列の前後の空白を取り除くなどの方法がある。
target = target.replace(/(^\s+)|(\s+$)/g, "");
左側のみを取り除く ltrim も同様な方法でできる。
target = target.replace(/^\s+/, "");
右側の rtrim も同様に。
target = target.replace(/\s+$/, "");
もし全角空白も取り除きたい場合は \s+ の部分を [\s ]+ とするとできる。
更に、 prototype 言語らしく String クラスを装飾してやる方法や jquery を使う方法も一応書いておく。
Ubuntu 16.04LTS はデフォルトが php7 で、時に php5 が必要なことがあるので、そんなときにどうするかのメモ。
Phusion Passenger の標準の実行ユーザーは Apache の実行ユーザー、例えば Ubuntu だと www-data 、とは違うらしい。これを変更するには
PassengerDefaultUser www-data
を mods-available/passenger.conf なりに指定する。
telnet コマンドは基本的に平文の通信しかサポートしてなくて、 HTTPS プロトコルに HTTP コマンドを手動でちょっと発行したいときなどに対応できない。
debian には telnet-ssl っていうパッケージがあるみたい何だけど、 CentOS 5 上でコンパイルしようとしたらどうにもエラーで進まないので、ちょっと perl でサイトを色々参考にして作ってみた。その時のメモ。というかソース。
特に細かい説明は無し。
追記:最近はほとんど openssl の s_client でやっている。
$ openssl s_client -connect www.example.com:443
javascript で例えば簡単な例で setTimeout() 関数にコールバック関数を引数付きで指定したい例を考えてみる。
var sayHello = function(who) { alert('Hi ' + who + '!'); }; setTimeout(sayHello, 3000);
これだと who には何も値が渡らず Hi undefined! となってしまう。
かといって sayHello('Mike') とかやるとそれが実行された結果が渡されて、 setTimeout() 自体動作しない。
グローバルな変数を定義しておくとか解決方法はいくつうかあると思うけど、きれいなやり方を数例メモしておく。
まじめに Rails アプリを Mongrel cluster でセットアップした時のメモ。環境は、 ruby-1.8.7-p334@rails_2_3_14 です。
注意: Mongrel-1.1.5 は Rails3 ではエラーで動きません。
1.2.0pre2 を使うか、 Rails のバージョンをデグレするか、もしくは、手動で Mongrel を少しいじるか。
もしくは Thin か Phusion Passenger を使ってもいいかと思います。
ちなみにエラーは以下のようなもの。
[Enjoi-MacBook:~/Websites/EnjoiTech/www.enjoitech.com] $ mongrel_rails start ** Starting Mongrel listening at 0.0.0.0:3000 ** Starting Rails with development environment... /usr/local/rvm/gems/ruby-1.8.7-p334@rails_3_0_9/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require': no such file to load -- dispatcher (LoadError)
Passenger を使えばこんな小面倒くさいことはしなくてもいいんですけどね。 cluster とか響きがいいじゃないですか。
php の foreach は基本値渡しで、受け取った値を変更しても当然元の配列データは変更されない。
でも実際は参照渡しもできることを知ったので一応メモ。
以下は普通の値渡しの例。
$enjoi = array("normal", "crazy"); foreach( $enjoi as $e ) { if( $e == "crazy" ) { $e = "normal"; } } var_dump($enjoi);
array(2) { [0]=> string(6) "normal" [1]=> string(6) "crazy" }
でも関数の参照渡しみたいに & をつけてやると、参照渡しを使って foreach で配列を処理できる。
$enjoi = array("normal", "crazy"); foreach( $enjoi as &$e ) { if( $e == "crazy" ) { $e = "normal"; } } var_dump($enjoi);
array(2) { [0]=> string(6) "normal" [1]=> &string(6) "normal" }
同様に key-value 配列を扱う場合も value の変数に & をつければ同じようにできる。
foreach( $enjoi as $key => &$val ) { ... }
Native extensions をインストールしようとすると、通常の gem install コマンドではうまくいかないことがある。
この場合、以下のようにビルドソースを指定してやる必要がある。
$ sudo gem install ruby-debug19 -- --with-ruby-include=/Users/ma/Documents/Build/tar/ruby-1.9.2-p0/
Postgresql の pg extension の場合で、 Mac にパッケージで Postgresql をインストールしてある場合は
gem install pg -- --with-pg-config=/Library/PostgreSQL/9.0/bin/pg_config
という感じ。
rvm で ruby 1.8.7 をインストールしようとした際に、コンパイルエラーでインストールに失敗した。ログを見てみると
readline.c: In function ‘username_completion_proc_call’: readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function) readline.c:730: error: (Each undeclared identifier is reported only once readline.c:730: error: for each function it appears in.) make[1]: *** [readline.o] Error 1
代わりに自分で readline をダウンロードしてコンパイル、 /usr/local/ にインストールして、もう一度 readline のインストールパスを指定して rvm install
vm install 1.8.7 -C --with-readline-dir=/usr/local/
もしくは rvm readline パッケージをインストールしてコンパイルしてもうまくいくこともあるらしい。
$ rvm --skip-autoreconf pkg install readline $ rvm reinstall 1.8.7
rvm を使って rails-3.2.3 を実行しようとした際に、
LoadError: no such file to load -- openssl
となり実行できなかった。 openssl の RPM は devel も含めてインストールされてるので、何が原因かと探したら、 rvm の openssl パッケージを入れた方がいいらしい。
とりあえず、 ruby を入れ直す。
$ rvm uninstall 1.8.7 $ rvm cleanup all $ rvm pkg install openssl $ rvm install 1.8.7
これで更に rails を入れ直したら、動くようになりました。同様に iconv などでも発生する事があるかと思います。
以前 rvm を Mac OSX にインストールして、いざ rails を実行すると、以下のようなリンクエラーが出る。
$ ./script/server start dyld: lazy symbol binding failed: Symbol not found: _libiconv_open Referenced from: /usr/local/rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-darwin10.7.0/iconv.bundle Expected in: flat namespace dyld: Symbol not found: _libiconv_open Referenced from: /usr/local/rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/i686-darwin10.7.0/iconv.bundle Expected in: flat namespace Trace/BPT trap
これは要するに iconv.bundle がリンクしている先の libiconv ライブラリに存在すべきシンボルが無いという旨のエラー。発生する原因は色々あると思うけど、多いのは独自にライブラリを ports や コンパイルなどでインストールして複数存在する場合に起こる事が多いと思う。
例えば今回の場合は、独自に libiconv を /usr/local にインストールしていたため、 rvm インストール時に使用されたライブラリと、いざ実行したさいにロードしようとしているライブラリが違ってしまっているためエラーが発生する。
解決方法がいくつかあったので、それをメモ。
Mac に LAMP もとい MAMP 環境を構築したときのメモ。いろいろと癖もあったりはまったところもあったけど、とにかくできました。
構築する上でのポリシーとしては、
Mac にインストールされているライブラリと DarwinPorts で入れたものを混合するとコンパイルでエラーを起こすことが多いっぽい。
環境は以下の通り。
Mac OS X 10.5.6
mysql-5.1.33
postgresql-8.3.7
apache-2.2.11
php-5.2.9
Zend Framework の Zend_Mail を使用すると色々な方法で簡単にメールが送れます。色々試してみたので、 Zend_Mail を使用して以下のそれぞれの方法でメールを送る方法のメモ。
オブジェクトの位置を offset().top で取得して、 animate() で body の scrollTop を変更する。
var divOffset = $('#hogeContainer').offset().top; $('body').animate({scrollTop: divOffset + 'px'}, 1000);
うちのレンタルサーバのスペックが低いため MySQL 動かしたくないので、 Wordpress を SQLite で動かすようにしてみた。
してみたと言っても、プラグインがあるのでそれを入れるだけ。でもそもそも個人や一企業で使うブログを MySQL なんてもので動かすのもナンセンスな話だし、 SQLite は早い。なので、一応メモ。