Cookie が無効になっていて MediaWiki にログインできないって言われた件

結論

セッションディレクトリが書込みできませんでした。

エラーメッセージ

ログインのエラー 
example wikiではログインに Cookie を使用します。 Cookie を無効にしているようです。 Cookie を有効にしてから、もう一度試してください。

当方の環境

  • さくらのVPS
  • CentOS7.2.1511 x86_64
  • Nginx + php-fpm
  • PHP 5.4

調べたこと

  • ログにも大したこと書いてない。
  • Cookie は無効になってない。
  • シークレットモードでやってみたけど同じ。
  • Cookie 消してみたけど変わらない。
  • パスワード再発行しても同じ。
  • ブラウザ変えてみたけど同じ。

ぐぐって調べてみるとセッションのディレクトリが書き込みできませんでした、てへ♪的なスレッドが見つかった。

なるほどな。

phpinfo() 出力させてセッション格納ディレクトリを調べる。

session.save_path = /var/lib/php/session

ディレクトリのパーミッションを確認。

[root@mx1 mediawiki]# ls -l /var/lib/php/
合計 4
drwxrwx--- 2 root apache 4096  5月 12 22:49 session
[root@mx1 mediawiki]# ls -l /var/lib/php/session/
合計 64
-rw------- 1 nginx nginx 3436  3月 13 12:10 sess_29ih6fgffffffffff9ee024fa7
(snip)
-rw------- 1 nginx nginx   53  3月 19 07:57 sess_tpih6fgfffffork4bvffmff625

なんでグループが apache やねん!
そりゃ書き込めないはずだわ。
最近流行りに乗って Nginx 使ってるので Apache は使っていない。
ファイル自身は nginx 所有者で大丈夫っぽいな。
Ansible でメールサーバー構築する Playbook 開発してたからそれが原因かな。
念のため nginx と php-fpm の実行ユーザを確認する。

[root@mx1 mediawiki]# vim /etc/nginx/nginx.conf
[root@mx1 mediawiki]# vim /etc/php-fpm.d/www.conf
[root@mx1 mediawiki]# id nginx
uid=995(nginx) gid=993(nginx) groups=993(nginx)

対策実施

ディレクトリのグループを nginx に変更する。

[root@mx1 mediawiki]# chown root:nginx /var/lib/php/session
[root@mx1 mediawiki]# ls -l /var/lib/php/
合計 4
drwxrwx--- 2 root nginx 4096  5月 12 22:49 session

用が済んだら phpinfo のファイルは削除する。

[root@mx1 mediawiki]# rm -f phpinfo.php

これでちゃんとろぐいんできるようになりましたとさ。
めでたしめでたし。

参考リンク

  1. [RESOLVED] Cannot Login or Register. Enable Cookies on Project:Support desk
  2. Help:ログイン – MediaWiki

Nginx + php-fpm の CentOS 7.2.1511 をリブートしたら 502 Bad Gateway になった

更新が溜まっていたので yum -y update した。
カーネル系の更新があったのでリブートしたら 502 Bad Gateway となった。

2016-04-03_20h32_15

あまりにも初歩的なんだけど、ログを確認したら

2016/04/03 20:31:21 [crit] 1410#0: *1 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 203.0.113.12, server: pg1x.io, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "pg1x.io", referrer: "https://blog.pg1x.com/"

FastCGI 処理系の php-fpm と通信できていないっぽい。
つまり php-fpm のプロセスが立ち上がっていない。
なんつー初歩的。。。
自動起動設定して起動して解決。

systemctl start php-fpm
systemctl enable php-fpm

Amazon Linux(2013.09)にnginxとPHPをインストールする

一昨日あたりからnginxを始めました。

インストール

yum -y install nginx
yum -y install php-fpm
yum -y install php-mysql php-mbstring php-mcrypt

ドキュメントルートディレクトリを用意する

mkdir -p /var/www/html

/etc/nginx/nginx.conf

location / {
root   /var/www/html;
index  index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
include        fastcgi_params;
}

/etc/php-fpm.d/www.conf

listen = 127.0.0.1:9000
↓
listen = /var/run/php-fpm/php-fpm.sock
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0666
↓
listen.owner = nginx
listen.group = nginx
listen.mode = 0664
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
↓
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

起動

service php-fpm start
service nginx start
chkconfig php-fpm on
chkconfig nginx on

動作確認

cat <<EOF >/var/www/html/index.php
<?php
phpinfo();
EOF

蛇足

ちなみに、Amazon Linuxのバージョン確認は

[root@ip-xxx-xxx-xxx-xxx html]# cat /etc/system-release
Amazon Linux AMI release 2013.09

参考文献

AWS SDK for PHP 2を使ってEC2のインスタンスを起動してみる

Amazon Web Services ガイドブックのEC2セットアップスクリプトの内容をAWS SDK for PHP 2用に書きなおしてみました。

動くようになるまで結構大変でした。。。
ただ、APIから仮想サーバー立ち上げられるってすごいなあと改めて実感。
S3のときなどと違ってEC2は高価だから心臓に悪いですね。
こういうのいじるときはこまめにアカウントアクティビティチェックして、開放漏れのIPや無駄にインスタンス、スペックの高いインスタンスを知らずに立ち上げてしまっていないか注意しないといけないですね。

細かいセットアップについては

にゆずります。

では以下がスクリプトとなります。

<?php
error_reporting(E_ALL);
// Composer
require_once('vendor/autoload.php');
use Aws\Ec2\Ec2Client;
// AWSアクセストークン
$config = array(
'key'    => 'AKIAIOSFODNN7EXAMPLE',
'secret' => 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
// 東京リージョン指定
'region' => \Aws\Common\Enum\Region::AP_NORTHEAST_1,
);
$ec2 = Ec2Client::factory($config);
try {
$options = array(
// Amazon LinuxのAMIを使う
'ImageId' => 'ami-b1fe9bb0',
// インスタンス1個
'MinCount' => 1,
'MaxCount' => 1,
// キーを指定
'KeyName' => 'securekey',
// セキュリティグループを指定
'SecurityGroups' => array(
'webserver' // sg-134678
),
// インスタンスタイプはマイクロインスタンスを立ち上げる
'InstanceType' => 't1.micro',
);
$result = $ec2->RunInstances($options);
} catch (Exception $ex) {
exit("Instance Launch failed.: " . $ex->getMessage() . "\n");
}
// インスタンス情報を取得
$instance = $result['Instances'][0];
$instanceId = $instance['InstanceId'];
$availabilityZone = $instance['Placement']['AvailabilityZone'];
echo "Instance ID: $instanceId\n";
echo "Availability Zone: $availabilityZone\n";
// EC2インスタンスの準備ができるのを待つ
do {
$result = $ec2->describeInstances(array(
'InstanceIds' => array(
$instanceId
)
));
$status = $result['Reservations'][0]['Instances'][0]['State']['Name'];
$runnning = ($status == 'running');
if (!$runnning) {
echo "instance is currently in $status, waiting 10 seconds.\n";
sleep(10);
}
} while(!$runnning);
try {
// ElasticIPを割り当て
$result = $ec2->allocateAddress();
$publicIp = $result['PublicIp'];
echo "allocate IP Address: $publicIp\n";
} catch (Exception $ex) {
exit("Allocate IP Address failed. " . $ex->getMessage() . "\n");
}
try {
// ElasticIPをインスタンスにアタッチ
$ec2->associateAddress(array(
'InstanceId' => $instanceId,
'PublicIp' => $publicIp,
));
echo "Associated IP address : ${publicIp} to ${instanceId}\n";
} catch (Exception $ex) {
exit("IP Address Association failed. " . $ex->getMessage() . "\n");
}
try {
// 先ほど得られたアベイラビリティゾーンに1GiBのボリュームを2つ作成
$res1 = $ec2->createVolume(array(
'Size' => 1,
'AvailabilityZone' => $availabilityZone,
));
$res2 = $ec2->createVolume(array(
'Size' => 1,
'AvailabilityZone' => $availabilityZone,
));
$volumeId1 = $res1['VolumeId'];
$volumeId2 = $res2['VolumeId'];
echo "EBS Volume: $volumeId1, $volumeId2 created.\n";
} catch (Exception $ex) {
exit("EBS Volume create failed. " . $ex->getMessage() . "\n");
}
// ボリュームが使えるようになるまで待つ
do {
$result = $ec2->describeVolumes(array(
'VolumeIds' => array(
$volumeId1, $volumeId2
)
));
$status1 = $result['Volumes'][0]['State'];
$status2 = $result['Volumes'][1]['State'];
$volumeReady = ($status1 == 'available' && $status2 == 'available');
if (!$volumeReady) {
echo "volumes are currently in ($status1, $status2), waiting 10 seconds.\n";
sleep(10);
}
} while(!$volumeReady);
try {
// ボリュームをインスタンスにアタッチ
$res1 = $ec2->attachVolume(array(
'VolumeId' => $volumeId1,
'InstanceId' => $instanceId,
'Device' => '/dev/sdf',
));
$res2 = $ec2->attachVolume(array(
'VolumeId' => $volumeId2,
'InstanceId' => $instanceId,
'Device' => '/dev/sdg',
));
echo "Volume $volumeId1, $volumeId2 has been attached successfully.\n";
} catch (Exception $ex) {
exit("EBS Attache failed. " . $ex->getMessage() . "\n");
}
echo "Finished!!\n";

で、出力は以下のようになります。

$ php ec2_setup.php
Instance ID: i-11223344
Availability Zone: ap-northeast-1c
instance is currently in pending, waiting 10 seconds.
instance is currently in pending, waiting 10 seconds.
allocate IP Address: 54.111.95.222
Associated IP address : 54.111.95.222 to i-11223344
EBS Volume: vol-12345ba, vol-653ac created.
volumes are currently in (creating, creating), waiting 10 seconds.
Volume vol-12345ba, vol-653ac has been attached successfully.
Finished!!

AWS Management Consoleで確認したらちゃんとインスタンスが立ち上がってElasticIPがアタッチ、ボリュームもきちんとアタッチされていました。いいこいいこ。

参考文献

A conflicting conditional operation is currently in progress against this resource.

以前間違ってオレゴン州に作成してしまったバケットを削除して、AWS API経由で同じ名前で東京リージョンに新たにバケットを作成しようとしたらエラーになって怒られました。

PHP Fatal error:  Uncaught Aws\S3\Exception\OperationAbortedException: AWS Error Code: OperationAborted, Status Code: 409, AWS Request ID: XXXXXXXXXXXXXXXX, AWS Error Type: client, AWS Error Message: A conflicting conditional operation is currently in progress against this resource. Please try again., User-Agent: aws-sdk-php2/2.4.11 Guzzle/3.7.4 curl/7.19.7 PHP/5.3.3
thrown in /vagrant/src/s3/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/Name

イマイチよくわからなくていろいろ調べたところ

というエントリがひっかかりました。
どうもすぐにバケットを作りなおそうとしたのが原因ぽいです。
削除のオペレーションをやってもすぐにはバックエンドのトランザクションは完了されないみたいで、数時間置いてからもう一回やり直してくれとのことでした。

なのでその日は寝て、次の日にやったらうまくできました。

Composerを使ってみた

PHP版のBundlerみたいなもの。
最近この類の異常に目にするようになりました。
AWSの入門記事でも書きましたが、Composerに関する部分だけ抜粋してまとめます。
なので重複する文面が多いです。

Composerのインストール

curl -sS http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /var/www/aws/s3/composer.phar
Use it: php composer.phar

ここで composer.phar がカレントに作成されます。

composer.json の作成

jsonファイルを作成します。Gemfileみたいなものです。

{
"require": {
"aws/aws-sdk-php": "*"
}
}

Composerで依存パッケージのインストール

ここで composer.json に記述された依存パッケージがインストールされる。
カレントディレクトリの vendor ディレクトリにインストールされます。 .gitignorecomposer.phar とか vendor/ は外したほうがいいかもしれませんね。

$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/event-dispatcher (v2.4.0)
Loading from cache
- Installing guzzle/guzzle (v3.7.4)
Loading from cache
- Installing aws/aws-sdk-php (2.4.11)
Loading from cache
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses)
aws/aws-sdk-php suggests installing ext-apc (Allows service description opcode caching, request and response caching, and credentials caching)
aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses)
aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export)
Writing lock file
Generating autoload files

不足しているシステムパッケージがあったらyumとapt-getを使ってインストールします。

さらにパッケージ追加

今度はlog4phpを使いたくなったとしましょう。
composer.json は以下のようになります。

{
"require": {
"aws/aws-sdk-php": "*",
"apache/log4php": "2.3.0"
}
}

bundle installみたいな感覚でやってみましたが

$ php composer.phar install
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files

lockファイルと一致しないと怒られてしまいました。
こういうときはupdateしないといけないみたいです。
ただ、

php composer.phar update

とするとバージョンがロックされたものについてまでアップデートがかかってしまうので、今回はlog4phpに関係するものだけインストールしてほしいので以下の様な感じにします。

php composer.phar update apache/log4php
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing apache/log4php (2.3.0)
Cloning 8c6df2481cd68d0d211d38f700406c5f0a9de0c2
Writing lock file
Generating autoload files

実際にアプリで使ってみる

ここでは追加でインストールしたlog4phpを使っています。
AWS SDKは使っていません。ゴメンなさい。
カレントディレクトリに vendor ディレクトリがあることを確認してください。

<?php
// composer.json に記述されたパッケージがインストールされた
// Vendorディレクトリの中身をロードするおまじない
require 'vendor/autoload.php';
$log = Logger::getLogger("hogehoge");
$log->info("Hello, World!");

実行してみます。
今回はコマンドラインです。

$ php hello_composer.php
INFO - Hello, World!

参考サイト

  1. gist:7838085
  2. Composer: how can I install another dependency without updating old ones? – Stack Overflow
  3. PHP – composer の「Warning: The lock file is not up to date ~」 – Qiita [キータ]
  4. Composer

AWS SDK for PHP 2 入門(Composer編)

今年の春頃に無料枠で契約してそのままになってたAWSをもう少し本格的に習得してみようと最近しこしこと本やらネットやらで勉強していました。
バックアップとかスケールアウト、障害対応であまり頭を悩ませなくて良さそうなので最近とても魅力的に見える。
インフラまわりの管理は意外と大変なんですよね・・・。

とりあえずAWS Management ConsoleからEC2のインスタンスを立ち上げたり、S3にファイルをアップロードしたり、Route53でDNSゾーンを管理したりしてみてそれっぽく使うことはできるようになったけど、どうも何かが違う気がする。
機能が多すぎて使いどころや、定石みたいなのがわからないので体系的な知識を得るために本を購入してみました。
こういうのから基本的な考え方を吸収していけるのはいいね。

やっぱりAWSの着目すべき点はインフラに統合されたAPIが提供されているところにあるんですかね。
実際にS3のAPI叩いてみたけど、少しずつ面白さがわかってきた。少しだけね。

躓いたところ

さて、一番最初のサンプルを作成しようと思って、一番最初に躓いたのですが、本書ではAWS SDK for PHPをインストールするように言われているのですが、どこからダウンロードしたらいいのかよくわかりませんでした。

ここで aws.phar というファイルがダウンロードできるのですが、これをどうしたらいいのかわからない・・・。

こちらも aws.phar。pharという拡張子はPHP Archiveの略のようなのですが、どうもこのファイルをインクルードして使うようです。

いろいろ試行錯誤してやっとネットに掲載されていた簡単なサンプルが動くようになったのですが、どうも本のサンプルと書き方がぜんぜん違うように思えて、よくよく調べてみたら本に載っているのはバージョン1のもののようです。

バージョン1で合わせてサンプルをやっていってもいいのですが、どうせ今後は2系にシフトしていくので、2系のイディオムに読み替えながら進むようにしました。

上のようにpharをインクルードしてもいいのですが、AWS SDK for PHP 2開発ではComposerを併用して開発するのが推奨されているようなので、それに従います。

それでは始まり始まり。

環境

VagrantとChef Soloあたりでちゃちゃっと作れちゃうと思います。
それか普通にEC2のインスタンスや他の既成の仮想マシンにインストールすればいいと思います。

  • CentOS6.4 x64 または Ubuntu 12.04 LTS
  • Apache2
  • PHP5.3.3

Composerのインストール

ComposerはRailsのBundlerみたいなもんですね。

curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /var/www/aws/s3/composer.phar
Use it: php composer.phar

ここで composer.phar がカレントに作成されます。

composer.json の作成

jsonファイルを作成します。Gemfileみたいなものです。

{
"require": {
"aws/aws-sdk-php": "*"
}
}

Composerで依存パッケージのインストール

ここで composer.json に記述された依存パッケージがインストールされる。
カレントディレクトリの vendor ディレクトリにインストールされます。 .gitignorecomposer.phar とか vendor/ は外したほうがいいかもしれませんね。

$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/event-dispatcher (v2.3.7)
Downloading: 100%
- Installing guzzle/guzzle (v3.7.4)
Downloading: 100%
- Installing aws/aws-sdk-php (2.4.11)
Downloading: 100%
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses)
aws/aws-sdk-php suggests installing ext-apc (Allows service description opcode caching, request and response caching, and credentials caching)
aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses)
aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export)
Writing lock file
Generating autoload files

不足しているシステムパッケージがあったらyumとapt-getを使ってインストールします。
たぶんUbuntuの場合そのままだとエラーになると思います。詳しくは下のトラブルシューティングへ。

最初のAWS SDK for PHP 2プログラミング

ここではバケットの一覧表示をするプログラムを書いてみたいと思います。
プログラムは以下のサンプルを参考にさせていただきました。

include/awssecure.inc.php

AWSのアクセスキーを設定します。これは漏れたらやばいので別ファイルとして管理するといいです。
最初アクセストークンはどこで取得すればいいんだろう?って思っていたのですが、以下で取得するようです。

ただ、警告にもあるとおり、ここで発行されるアクセストークンはAWSアカウントに直接紐づく rootユーザーみたいなとんでもない特権レベル を持っているので、あんまりおすすめされません。

なので、IAM(Identity and Access Management)でユーザーとグループを作成してそこでクレデンシャルを発行するのがスマートなようです。

ちなみに、1ユーザーあたり2つのクレデンシャルしか発行できないみたいです。

<?php
// AWSアクセストークン
$config = array(
'key'    => 'AKIAIOSFODNN7EXAMPLE',
'secret' => 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
);

gitで管理するときはこのファイルのトラッキングを外しましょう。
ただ、テンプレート的なファイルだけは残っていてほしいのでインデックスから無視するだけにします。

git update-index --skip-worktree include/awssecure.inc.php

list_buckets.php

以下が本命のプログラムとなります。

<?php
error_reporting(E_ALL);
// Load Composer Vendor Modules
require_once('vendor/autoload.php');
// AWS Credential
require_once('include/awssecure.inc.php');
use Aws\S3\S3Client;
$s3 = S3Client::factory($config);
$blist = $s3->listBuckets();
foreach ($blist['Buckets'] as $b)
{
echo "${b['Name']}: created at ${b['CreationDate']}\n";
}

実行してみる

コマンドラインからでも、ブラウザ経由でもどっちでも大丈夫だと思います。

$ php list_buckets.php
hogehogehoge: created at 2013-11-22T10:50:47.000Z
sitepoint-aws-cloud-book-wnoguchi: created at 2013-12-04T23:06:19.000Z
blhablahblah: created at 2013-12-02T03:48:40.000Z
foobarbar: created at 2013-11-09T12:13:07.000Z

これでOKです。

とりあえずAWS SDKを使ったプログラミングを始めようと思って躓いたところをまとめてみました。

トラブルシューティング

CentOSのエラー

以下は実際にXMLがからむAWS SDKを呼び出している時に発生していた気がします。

php create_bucket.php ppp
PHP Fatal error:  Class 'XMLWriter' not found in /vagrant/src/s3/vendor/guzzle/guzzle/src/Guzzle/Service/Command/LocationVisitor/Request/XmlVisitor.php on line 201

以下のようにして対応

yum -y install php-xml

Ubuntuのエラー

Composerの依存パッケージをインストールしようとしたらエラーになりました。

php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- aws/aws-sdk-php 2.4.0 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.1 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.10 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.11 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.2 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.3 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.4 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.5 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.6 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.7 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.8 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.4.9 requires guzzle/guzzle ~3.7.0 -> satisfiable by guzzle/guzzle[v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.3.4 requires guzzle/guzzle ~3.6.0 -> satisfiable by guzzle/guzzle[v3.6.0].
- aws/aws-sdk-php 2.3.1 requires guzzle/guzzle ~3.4.3 -> satisfiable by guzzle/guzzle[v3.4.3].
- aws/aws-sdk-php 2.3.2 requires guzzle/guzzle >=3.4.3,<4 -> satisfiable by guzzle/guzzle[v3.4.3, v3.5.0, v3.6.0, v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.3.3 requires guzzle/guzzle >=3.4.3,<4 -> satisfiable by guzzle/guzzle[v3.4.3, v3.5.0, v3.6.0, v3.7.0, v3.7.1, v3.7.2, v3.7.3, v3.7.4].
- aws/aws-sdk-php 2.3.0 requires guzzle/guzzle ~3.4.1 -> satisfiable by guzzle/guzzle[v3.4.1, v3.4.2, v3.4.3].
- aws/aws-sdk-php 2.2.0 requires guzzle/guzzle ~3.3.0 -> satisfiable by guzzle/guzzle[v3.3.0, v3.3.1].
- aws/aws-sdk-php 2.2.1 requires guzzle/guzzle ~3.3.0 -> satisfiable by guzzle/guzzle[v3.3.0, v3.3.1].
- aws/aws-sdk-php 2.1.1 requires guzzle/guzzle ~3.2.0 -> satisfiable by guzzle/guzzle[v3.2.0].
- aws/aws-sdk-php 2.1.2 requires guzzle/guzzle ~3.2.0 -> satisfiable by guzzle/guzzle[v3.2.0].
- aws/aws-sdk-php 2.1.0 requires guzzle/guzzle ~3.1.2 -> satisfiable by guzzle/guzzle[v3.1.2].
- aws/aws-sdk-php 2.0.0 requires guzzle/guzzle 3.0.* -> satisfiable by guzzle/guzzle[v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7].
- aws/aws-sdk-php 2.0.1 requires guzzle/guzzle 3.0.* -> satisfiable by guzzle/guzzle[v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7].
- aws/aws-sdk-php 2.0.2 requires guzzle/guzzle 3.0.* -> satisfiable by guzzle/guzzle[v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7].
- aws/aws-sdk-php 2.0.3 requires guzzle/guzzle 3.0.* -> satisfiable by guzzle/guzzle[v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7].
- guzzle/guzzle v3.7.4 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.7.3 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.7.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.7.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.7.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.6.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.5.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.4.3 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.4.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.4.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.3.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.3.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.2.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.1.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.7 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.6 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.5 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.4 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.3 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- guzzle/guzzle v3.0.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- Installation request for aws/aws-sdk-php * -> satisfiable by aws/aws-sdk-php[2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.1.0, 2.1.1, 2.1.2, 2.2.0, 2.2.1, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.4.1, 2.4.10, 2.4.11, 2.4.2, 2.4.3, 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8, 2.4.9].

PHPcurl拡張がないって言ってる気がします。

sudo apt-get -y install php5-curl

もういっかい。

php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/event-dispatcher (v2.3.7)
Downloading: 100%
- Installing guzzle/guzzle (v3.7.4)
Downloading: 100%
- Installing aws/aws-sdk-php (2.4.11)
Downloading: 100%
symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses)
aws/aws-sdk-php suggests installing ext-apc (Allows service description opcode caching, request and response caching, and credentials caching)
aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses)
aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export)
Writing lock file
Generating autoload files

うまくいきました。

参考サイト

S3開発に関しては以下のドキュメントが良さそう。

その他。

参考文献