質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

2回答

2991閲覧

Cakephp3 HTTPRequestにてエラーが発生してしまいます。解決策を教えてください。

kdoama

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/05/29 04:40

編集2017/05/29 05:05

現在、Cakephp3にて開発を行っております。

APIを使用して、データの更新を行う処理にて、

データをXML形式でPOSTしているのですが、以下のエラーが発生してしまい、処理が進まない状態にあります。

ソースコード

protected function _open($url) { set_error_handler(function ($code, $message) { $this->_connectionErrors[] = $message; }); $this->_stream = fopen($url, 'rb', false, $this->_context); restore_error_handler(); if (!$this->_stream || !empty($this->_connectionErrors)) { throw new Exception(implode("\n", $this->_connectionErrors)); } }

エラー内容:
fopen(): send of 8192 bytes failed with errno=11 Resource temporarily unavailable

※POSTデータを少なくすると、上手くいくことは確認しました。
送信データを少なくするしか方法はないのでしょうか。

どなたか解決策をご存知の方がいらっしゃいましたら、お教え願います。

環境は、
php 7.0.15
nginx

です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/05/29 04:47

エラーメッセージの意味は調べましたか?PHPコードと具体的なPOST内容がないので分かりませんが、原因がそのまま書いてあるように思います。
kdoama

2017/05/29 05:05

POSTの処理はcakephpのコアで行っております。念の為、その該当箇所のソースコートを載せました。
guest

回答2

0

こちらが参考になるかもしれません。

ファイル入出力の基本 (IO モデル) を勉強する

端末が一度に受け取ることができるバイト数が決まっているので, 端末のバッファがいっぱいになった時点からそれを書きだしてフラッシュするまでの間, errno = 11 が read に返されているという状況です。

おそらくどこかで、
int bufsize = 8192;
のような設定が行われている可能性があるので調べてみてはいかがでしょうか?
※気になるので私も調べてみよう…

こんな情報を発見しました。

通信量が増えてきた所でResource temporarily unavailableということでリソース不足で怒られるようになった。

sysctl net.core.somaxconn

net.core.somaxconn = 128

128??? すくなっ!?

nginxで2048を受けること考えると倍くらいでも良いのかもしれないけど、大きめに設定。この値はnet.core.somaxconnより大きかった場合、net.core.somaxconnの値を優先するようです。

投稿2017/05/29 08:41

編集2017/05/30 01:23
raichi

総合スコア278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kdoama

2017/05/30 01:29

回答ありがとうございます! php側でエラーが発生していると思ったのですが、こういった原因もありうるのですか?
raichi

2017/05/30 01:32

nginxの設定で絞られている可能性もありますね。こちらの場合は通信量ではな許容数の問題です。
guest

0

php.iniのこの辺の値が超えちゃってるんじゃないでしょうか?
格安レンタルサーバーとかだと2Mに初期値がなっていたと思います。

memory_limit (メモリ使用量の上限)
post_max_size (POSTデータの最大サイズ ※1回のアップロードファイルすべての合計サイズ)
upload_max_filesize (1ファイルあたりの最大アップロードサイズ)

投稿2017/05/29 05:25

mirainonakamura

総合スコア137

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/05/29 05:37 編集

僕もそれを考えましたが「8192bytes」って「8KB」なのでそんなに小さいわけないやろーという感じで回答できるほどの情報にたどりつけてません;;
mirainonakamura

2017/05/29 05:38

コメントありがとうございます!8kbかー!うーん! "※POSTデータを少なくすると、上手くいくことは確認しました。" なので、何かを超えているのかと思いました。 タイムアウトも可能性としてありそうですが、、、 どの容量だとうまくいって、どのくらいの容量だと失敗するのか調査していくと 何かわかるかもしれませんね! set_time_limit( 秒 ); Ex) set_time_limit( 180 ); // 3分
m.ts10806

2017/05/29 05:51 編集

そうなんですよね。「リソースが一時的に利用できない」ということからも何かを超えているのは間違いなさそうですよねー・・ 
kdoama

2017/05/29 07:53

コメントありがとうございます! 一応システム上set_time_limitは30秒に設定してあります。 また、ログを確認しましたところ、このエラーのあとにタイムアウトのレスポンスが返ってきていることを確認しております。
kdoama

2017/05/29 07:55

また、API側のレスポンスが、xmlのデータ上7件ほどでもなかなか遅く感じました。。。。3~4秒ほど待ちました。。。。 今回エラーとなっているのは1200件ほどのデータになります。 エラーになる場合は、30~40秒ほど待機したのちこのエラーになっているって感じでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問