PHP と Mongodb と gridFS

136 views
Skip to first unread message

Shota Onishi

unread,
Oct 18, 2013, 8:38:53 AM10/18/13
to mongo...@googlegroups.com
こんにちは。
PHPでMongodbに画像ファイルをアップロードさせようとしていますが、どうもうまくいきません。
いろんなサイトを拝見させて頂きましたが、すべてうまくいきませんでしたので、ここに投稿させて頂いてます。

<?php
$m 
= new MongoClient();
$gridfs $m->selectDB('test')->getGridFS();

$gridfs->storeUpload('pic', array('username' => $_POST['username']));
?>

html構文
<form method="POST" enctype="multipart/form-data">
    <label for="username">ユーザー名</label>
    <input type="text" name="username" id="username" />

    <label for="pic">プロフィール画像をアップロードしてください</label>
    <input type="file" name="pic" id="pic" />

    <input type="submit" />
</form>

と書かれていますが、他に何か設定等が必要ですか?
何回も実行しましたが、上記のphp構文を読むところでストップしている感じです。
実際に画像アップされているかた、何か助言頂けるかた、よろしくお願い致します。

環境は、
VMware FusionでCentos6.4
php5.3.3
mongodb2.4.6

Hiroaki Kubota

unread,
Oct 18, 2013, 9:14:39 AM10/18/13
to mongo...@googlegroups.com
まず、2点確認してください。
・PHPが動いているのか?
 =>任意の方法でよいです。
・あとは、MongoClientはデフォルトの接続先(localhost:27017)に繋がってるのか?
 PHPを叩いたときに刺さっているなら
 =>linux ならば、netstat -antp とかで、localhost:27017とlocalhost:??? がESTABLISHEDに成ってるかどうか?
    (mac,windows だとnetstat のオプションが多少違います。)

PHPをコマンドで叩いても良いですね。($POSTじゃなく、任意のデータを突っ込んでみる)

まずはこんな感じでどうでしょう?






2013年10月18日 21:38 Shota Onishi <shooooot...@gmail.com>:

--
このメールは Google グループのグループ「MongoDB JP」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、mongodb-jp+...@googlegroups.com にメールを送信します。
このグループに投稿するには、mongo...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/mongodb-jp からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

Shota Onishi

unread,
Oct 18, 2013, 9:39:05 AM10/18/13
to mongo...@googlegroups.com
アドバイスありがとうございます。
試してみたのですが、同じ結果でした。すいません。

2013年10月18日金曜日 21時38分53秒 UTC+9 Shota Onishi:

emup...@gmail.com

unread,
Oct 18, 2013, 3:23:02 PM10/18/13
to mongo...@googlegroups.com
初めまして。

最初のメールに載せてあったHTML、PHPコードをコピペして、
正常に動作したことを確認しました。
HTMLとPHPは別ファイルで作り、
変更箇所はHTML内の<form>タグのaction属性に、PHP側のURLを付与しただけです。


実行した環境は下記の通りです。
・CentOS 6.4 64bit (@VirtualBox)
・Apache 2.2.15 (yum repo)
・PHP 5.3.3 (yum repo)
・MongoDB 2.4.6 (10gen repo)
・(PHPモジュール)mongo 1.4.4 (pecl)
・iptable, selinuxともにOFF、上記ミドルウェアはデフォルト設定のままで稼働


問題の切り分けをさらに進めてみてはどうでしょうか。
・PHPからMongoDBへ通常のinsert処理を行うことが出来るかどうか
・mongo shellからinsert処理を行うことが出来るかどうか
・PHPからMongoDBに接続できているかどうか
・PHPから指定ポート(27017)に接続できているかどうか

(PHPはWebブラウザからの実行と、コンソールからの実行の両方で試してください)

等を確認してみるといかがでしょうか。


・PHPからMongoDBに接続できているかどうか
↑はログレベルを変更して、接続してみるとかで確認できると思います。
========
(操作の例)
$ mongo
> db.adminCommand({setParameter:1, logLevel:4})
> exit
$ sudo tailf /var/log/mongo/mongod.log | grep -v 'journal'

(Webページから該当のコードへアクセスするとコネクション時のログが表示されます。Ctrl+Cで抜けられます。)
========


・PHPから指定ポート(27017)に接続できているかどうか
こちらはnetcatを利用した方法だと下記操作で確認が可能です。
========
(操作の例)
$ sudo yum install nc
$ nc -l 27017

(Webページから該当のコードへアクセスするとリクエスト内容が表示されます。Ctrl+Cで抜けられます。)
========
> --
> このメールは Google グループのグループ「MongoDB JP」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、mongodb-jp+...@googlegroups.com (mailto:mongodb-jp+...@googlegroups.com) にメールを送信します。
> このグループに投稿するには、mongo...@googlegroups.com (mailto:mongo...@googlegroups.com) にメールを送信してください。

Shota Onishi

unread,
Oct 21, 2013, 2:44:37 AM10/21/13
to mongo...@googlegroups.com
初めまして!アドバイスありがとうございました。
phpとhtmlに分けて実行してみましたが、うまくできませんでした。
コマンドラインでは、
$mongofiles -v -d test put xxxxx.jpg 
で格納できます。
$mongofiles -v -d test get xxxxx.jpg 
で取得できました。

phpでの設定かなと思って、php.iniの
upload_max_filesize = 512M 
post_max_size = 512M 
memory_limit = 512M 
に変更もしてみました。

それでもだめな場合の原因って他に何がありますか?

Shota Onishi

unread,
Oct 21, 2013, 6:47:08 AM10/21/13
to mongo...@googlegroups.com
おかげさまで、無事に格納する事ができました。
アドバイスを頂いたcrumbjpさん と emup...@gmail.comさんには本当に感謝致します。
ありがとうございました!
これからもMongodbの知識を深めていけるように精進していきます。これからもよろしくお願い致します!
Reply all
Reply to author
Forward
0 new messages