【PHP】下らねぇ質問はID出して書き込みやがれ 130
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2013/09/19(木) 13:47:19.93ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 129
http://kohada.2ch.net/test/read.cgi/php/1375636484/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0252nobodyさん
2013/10/09(水) 19:00:59.32ID:???0253nobodyさん
2013/10/09(水) 19:40:38.43ID:0jpqnncdConfiguration File (php.ini) Path が C:\Windows なのに
Loaded Configuration File が C:\pleiades\xampp\php\php.ini
になってるんですが、
これはどこに書かれてある設定が効いているのでしょうか?
なお、httpd.conf に PHPIniDir の記述はありませんし、
Windows環境変数Pathの中にも、それらしい記述はありませんでした。
0254nobodyさん
2013/10/09(水) 19:42:23.94ID:???0255nobodyさん
2013/10/09(水) 20:32:06.19ID:???http://www.php.net/manual/ja/configuration.file.php
0258nobodyさん
2013/10/09(水) 21:41:38.76ID:???三項演算子が "演算子"、"式" ってことが理解できてないからこんなアホなことを平気で書く
if文で代用とか言ってる馬鹿と同じ
0259235
2013/10/10(木) 01:09:23.38ID:???>>229
わかったわかったあーめんどくせえ
<?php
$isstatus = true;
$isstatus ? print('エラーじゃないです'):print('偽です');
0260nobodyさん
2013/10/10(木) 01:46:04.58ID:???0261nobodyさん
2013/10/10(木) 02:44:44.65ID:???EC−○UBE疲れたお・・・
0262nobodyさん
2013/10/10(木) 03:15:58.11ID:???めんどくさいなら書き込まなくていいよ^^
スレが汚れるだけだから^^
示威か自慰ならブログでやってね^^
0264nobodyさん
2013/10/10(木) 16:05:48.85ID:l0x7pgcKこれは1ファイルには1テストクラスでしょうか?
複数のクラスを定義すると、先頭の1つしかテストされません。
テストスイートを定義する必要があるのかと思いましたが
複数のファイルからスイートを作成するので、1ファイル1クラスが原則のようにも思われました。
以下のように1ファイル内のテストを分類してる(したい)のですが、
このままPHPUnitでテストすることはできませんか?
// FooTest.php -- Fooクラスをテストするファイル
// method1メソッドのテスト
class FooMethod1Test extends PHPUnit_Framework_TestCase {}
// method2メソッドのテスト
class FooMethod2Test extends PHPUnit_Framework_TestCase {}
0265nobodyさん
2013/10/10(木) 16:20:18.29ID:l0x7pgcK現時点ではWindowsのコマンドプロンプトでテストをおこなっており、
次のコマンドで実行しています
phpunit FooTest
0266nobodyさん
2013/10/10(木) 17:17:35.74ID:l0x7pgcK素直にファイルを分割し、スイートを作成することにしました。
解決せず作業進めちゃいますが、
もしファイル内に複数のテストクラスでやってるよって人がいたら
声かけてもらえるとうれしいです
でわでわ
0267nobodyさん
2013/10/10(木) 23:08:41.32ID:???試してないからはっきりとは言えないけど
https://github.com/sebastianbergmann/phpunit/blob/master/PHPUnit/Runner/TestSuiteLoader.php#L60-L64
APIがこうなってる以上無理じゃないかな
> 複数のファイルからスイートを作成するので、1ファイル1クラスが原則のようにも思われました。
それもそうだし、
下手に分割するとリファクタリング時のメソッド統廃合で困らないかい?
0268nobodyさん
2013/10/11(金) 04:23:46.97ID:jgQ61xJw以下のコードだとcatch節にいかずに
Warning: file_get_contents(存在しないURL): failed to open stream: No such file or directory in xxx\test.php on line 3
と出力されます。何故でしょうか。
<?php
try {
$html = file_get_contents('存在しないURL');
echo $html;
} catch (Exception $e) {
echo $e;
}
?>
0269nobodyさん
2013/10/11(金) 05:40:07.55ID:???PHPのエラーと例外は別物
同列として扱いたいならエラーハンドラから投げよう
http://www.php.net/manual/ja/class.errorexception.php
0270nobodyさん
2013/10/11(金) 06:18:29.15ID:PQt/MpLB【PHPのバージョン】5.3
【連携ソフトウェア】MySQL
【質問内容】
正規表現の
preg_match_allであるサイトのソースを解析した際に
どうしてもマッチ出来なかったため、ソースの一部をstr_replaceで改変すると
マッチしました
コード例
preg_match_all('/<div id="null_.+?".+?name."(.+?)">(.*?)<div id="null_/s',$txt,$result);
※$txt内に<div id="null_〜<div id="null_が25個ぐらい存在
このコードだと20個以降マッチングしない
$txt=str_replace('<div id="nul_','kokohenkou',$txt);
として、preg_match_all('/'kokohenkou.+?".+?name."(.+?)">(.*?)'kokohenkou/s',$txt,$result);
するとすべてマッチングする
今まで経験則からstr_replaceしてからpreg_match_all使ってましたが
こういう動作をするのはなぜでしょうか?
0271nobodyさん
2013/10/11(金) 06:25:51.85ID:jgQ61xJwなるほど、そういうことでしたか
ありがとうございました。
0273nobodyさん
2013/10/11(金) 07:11:51.37ID:???ありがとうございます。
なるほど、Configuration File (php.ini) Path には
C:\Windows しか記載されていませんが、
実際はデフォルトで特定のパスを読み込んでるんですね。
0274nobodyさん
2013/10/11(金) 09:02:12.68ID:jgQ61xJwindex.phpは存在します。
<?php
echo apache_get_version();
http_post_data('index.php');
?>
エラーコードです。
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
Fatal error: Call to undefined function http_post_data() in xxx\test.php on line 3
0275nobodyさん
2013/10/11(金) 09:32:38.16ID:???http://www.php.net/manual/ja/function.http-post-data.php
> (PECL pecl_http >= 0.1.0)
pecl_http が入ってないんでしょう
0276nobodyさん
2013/10/11(金) 10:02:19.30ID:jgQ61xJwありがとうございます!
0277nobodyさん
2013/10/11(金) 10:55:00.59ID:/Nhu1Y1V商品が見つからなかった場合、HTTPステータスで404を返すべきでしょうか?
0278nobodyさん
2013/10/11(金) 10:58:22.22ID:6ra1/Oru0279nobodyさん
2013/10/11(金) 11:03:15.51ID:???ドキュメントがないわけじゃないし
受理はされてJSON返してんだから200じゃない
0280nobodyさん
2013/10/11(金) 11:21:03.37ID:???0281nobodyさん
2013/10/11(金) 11:27:00.76ID:/Nhu1Y1Vありがとうこざいます
200を返してJSON内に結果を記述するようにします
02821/2
2013/10/11(金) 12:31:27.07ID:SK3emKdrヘッダ、POSTが同じでステータスは200OKなんですがajaxのPOSTではレスポンスが返ってこないのです。
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>
<script src="js/jquery-ui-1.10.3.custom.min.js"></script>
<script src="js/jquery.socialbutton-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#search2").bind("change", function(){
alert( encodeURI($("#search2").val()));
$.ajax({
beforeSend: function(req) {
req.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
},
contentType :'application/x-www-form-urlencoded',
type : "POST",
02832/2
2013/10/11(金) 12:33:43.03ID:SK3emKdrdata : "appid="+encodeURI('dj0zaiZpPWFDOTJPS2FCeUwwRiZzPWNvbnN1bWVyc2VjcmV0Jng9MGU-')+'&'+
"sentence="+encodeURI($("#search2").val())+'&'+
"filter="+encodeURI('9'),
success: function(msg,xml){
alert( msg);
},
error:function(XMLHttpRequest, textStatus, errorThrown){
alert( 'error'+textStatus );
} }) }); });
</script></head>
<body><form action="http://jlp.yahooapis.jp/MAService/V1/parse" method="post">
<input type="text" name="appid" value="dj0zaiZpPWFDOTJPS2FCeUwwRiZzPWNvbnN1bWVyc2VjcmV0Jng9MGU-">
<input type="text" name="sentence" id="search2" value="12345">
<input type="text" name="filter" value="9">
<input type="submit" value="送信する"></form></body></html>
デベロッパーコード+ヤフーIDは実験用に取ったものなので、どうなっても大丈夫です。
0284nobodyさん
2013/10/11(金) 13:24:12.87ID:???0285nobodyさん
2013/10/11(金) 13:26:22.80ID:6ra1/Orupostの返り値とかって、chromeで見れなかったっけ
0286nobodyさん
2013/10/11(金) 13:31:43.43ID:???parseappid=〜→parse?appid=〜
0287286
2013/10/11(金) 13:35:21.27ID:???0288nobodyさん
2013/10/11(金) 13:44:01.53ID:???0289nobodyさん
2013/10/11(金) 15:04:16.89ID:HtFFGZ+p自分は500返してるけど何かちがうっぽい
0290nobodyさん
2013/10/11(金) 15:52:21.83ID:???0291nobodyさん
2013/10/11(金) 15:52:57.36ID:???HTTPステータスは200(OK)で戻して、エラー内容はcontentsで戻すよ派と、
HTTPのエラーコードを戻すよ派(特にRESTのとき)に分かれると思う。
500はinternal server errorなので使わない方が良い。じゃないと、バグなどで本当に内部エラーが
起こったときにわからなくなるから。
エラーコードを戻すことにするなら、4xxが良い。
0292nobodyさん
2013/10/11(金) 15:55:47.28ID:???HTTPステータス5xxはServer Error
という意味がある。
0293nobodyさん
2013/10/11(金) 15:57:10.13ID:???返す結果がなんかあるならxmlとかjson使ってerrorのコードや内容なんかを追加して入れときゃいいだけ
HTTPステータスコードでどうにかするってのはクレイジー
0294nobodyさん
2013/10/11(金) 16:19:24.66ID:???GoogleのとあるAPIでは、200,201,304,400,401,403,404,409,410,500を戻すが。
https://developers.google.com/gdata/docs/2.0/reference
0296nobodyさん
2013/10/11(金) 16:33:03.89ID:???例えばクライアントがjQueryだったとき、$.ajaxのcallbackでsuccess(), error()というのがある。
これはそれぞれajaxが成功したとき、失敗したときなんだが、どうやって振り分けているかというと、
HTTPステータスコードで判断している。
具体的には、2xxか304ならsuccess()、それ以外はerror()が呼ばれる。
それを踏まえると、(クライアント側が原因の)エラーの場合は、4xxを戻すのが良いと思う。
0297nobodyさん
2013/10/11(金) 16:33:27.66ID:???出来るっちゃ出来るけどサーバに頼るのが普通でしょ
>>294はまた別のプロトコルの話では?
0298nobodyさん
2013/10/11(金) 16:38:21.16ID:???4xxを返して(errorにして)、付随情報がなくてもエラーとして処理できるか。
の違い。
0299nobodyさん
2013/10/11(金) 16:39:30.14ID:???マジかよ。
http://php.net/manual/ja/function.header.php
http://php.net/manual/ja/function.http-response-code.php
0300nobodyさん
2013/10/11(金) 16:42:03.28ID:???>>293は単純に200で返す派なだけに見えるが。
ただ細かいエラー内容もらすほうが微妙なこと多いし、
HTTPステータスコードのレベルでエラー返して
error_logあたりで内部的にエラー管理したほうがいいことが多いような気がする。
もちろんそれが全ての場合での答えってわけじゃないが。
0301nobodyさん
2013/10/11(金) 16:42:38.63ID:???英語が読めないって悲しいね
> A client queries a Google service by issuing an HTTP GET request.
> The query URI consists of the resource's URI (called FeedURI in Atom) followed by query parameters.
0302nobodyさん
2013/10/11(金) 16:43:47.24ID:???xhrだと全部200で処理するのを前提としたサンプルコードで溢れてるからね。
0303nobodyさん
2013/10/11(金) 16:44:53.97ID:???認証エラーを
> 401 UNAUTHORIZED Authorization required.
じゃなくて200で返すのは違和感がある。
0306nobodyさん
2013/10/11(金) 16:51:35.33ID:???『Web API 設計のベストプラクティス集 "Web API Design - Crafting Interfaces that Developers Love"』
http://d.hatena.ne.jp/cou929_la/20130121/1358776754
0309nobodyさん
2013/10/11(金) 16:57:57.20ID:???0311nobodyさん
2013/10/11(金) 17:01:37.31ID:???HTTPでアクセスする場合の基本概念の話で一貫してる。
それがhttpdでもPHPでもmyappでも同じ。
0312nobodyさん
2013/10/11(金) 17:07:28.61ID:???> HTTPなんてエラーコード自分で生成するもんじゃないから
0313nobodyさん
2013/10/11(金) 17:08:58.68ID:???"OK";
} else {
"NG"
}
if (status==200 && response=="NG") {
ログインできません
}
///////////////
if (login) {
"OK";
} else {
http_status(401);
"NG";
}
if (status==401) {
ログインできません
}
どっちにしますか?って話?
0314nobodyさん
2013/10/11(金) 17:11:54.98ID:???0316nobodyさん
2013/10/11(金) 17:16:54.28ID:???0317nobodyさん
2013/10/11(金) 17:19:03.86ID:???いわゆるWeb APIならステータスコードの方がハンドリングしやすいし、error_page.htmlにリダイレクトした方が良い場合もあるし。
0318nobodyさん
2013/10/11(金) 17:24:57.58ID:???0319nobodyさん
2013/10/11(金) 17:35:40.25ID:???0320nobodyさん
2013/10/11(金) 17:41:24.12ID:???何に対して500返してるかもよくわからないのに相変わらず質問者置いてけぼり
0321nobodyさん
2013/10/11(金) 17:56:43.93ID:???0322nobodyさん
2013/10/11(金) 18:26:29.81ID:HtFFGZ+pありがとうございます
0323nobodyさん
2013/10/11(金) 18:31:12.58ID:???> 500はinternal server errorなので使わない方が良い。じゃないと、バグなどで本当に内部エラーが
> 起こったときにわからなくなるから。
デバッグ目的でステータスコードを変な風に使わないでくれ
サーバーサイドの問題だから素直に500番台を返して欲しいぜ
0325nobodyさん
2013/10/11(金) 18:47:09.82ID:???0326nobodyさん
2013/10/11(金) 20:23:51.08ID:???503をPHPで書き出すページにリダイレクトしてたけどな。
0327nobodyさん
2013/10/11(金) 20:30:28.72ID:???Apache
あぱっちぇ!
0328nobodyさん
2013/10/11(金) 20:35:35.83ID:???0329nobodyさん
2013/10/11(金) 21:07:07.93ID:21C5uPL0何らかの処理を差し込むことはできるでしょうか?
例えば一律に入力フィルターを通るようにする、といったことなんですが。
マニュアルのスーパーグローバル変数の項にPHP標準のフィルタのリンクがあったので
試してみたのですが、これはスクリプト内で任意に使用できるユーティリティのようでした
http://www.php.net/manual/ja/book.filter.php
0330nobodyさん
2013/10/11(金) 21:14:02.66ID:???収まる前にって送信するなってことじゃない?
となるとJavaScript側でやれとしか
0331282
2013/10/11(金) 21:47:41.01ID:SK3emKdr0332nobodyさん
2013/10/11(金) 22:05:25.91ID:21C5uPL0例えばGETリクエストをApacheが受け取る場合だと、
Apacheがパラメータを環境変数にセットし
PHPがこれを解析して$_GET(配列)をセットしていると思います。
で、文字コードのチェックや、一切受け付けない文字(制御文字など)を除去するなど
生データ(文字列)の段階で変換したりできると簡単かと思ったんです。
配列になってからでは、100のパラメータに対して100の処理が必要だけど
生データは1つの文字列なので1回で済むかなと考え、
実行プロセスの起動と変数をセットする間に
PHPコードでアクセスできるフックポイントがあればと思いました
0333nobodyさん
2013/10/11(金) 22:08:08.92ID:???0334nobodyさん
2013/10/11(金) 23:39:55.91ID:???<?php
header('Content-Type: application/xml');
ini_set('arg_separator.output', '&');
$url = 'http://jlp.yahooapis.jp/MAService/V1/parse';
$appid = isset($_POST['appid']) ? $_POST['appid'] : null;
$sentence = isset($_POST['sentence']) ? $_POST['sentence'] : null;
$filter = isset($_POST['filter']) ? $_POST['filter'] : null;
$data = http_build_query(
array(
'appid' => $appid,
'sentence' => $sentence,
'filter' => $filter
)
);
$xml = file_get_contents($url, false, stream_context_create(
array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\nContent-Length: " . strlen($data) . "\r\n",
'content' => $data
)
)
));
echo $xml;
post先をこのスクリプトに変えてね
0335282
2013/10/11(金) 23:41:55.82ID:SK3emKdrありがとうございます!感動しました!
0336nobodyさん
2013/10/12(土) 01:37:02.46ID:RtoR0pty<javascript>
var data = {};
data.result = resultArray; // resultArrayには配列が入っています
$.ajax({
type: "POST",
url: "save.php",
data: data
});
<PHP>
<?php
$filename = data.txt;
$result = $_POST['result'];
$fp = fopen($filename, 'w');
frite($fp, $result);
fclose($fp);
?>
こんなかんじで書いてみたのですが
data.txt には何も書き込まれません。
エラーでwrite() expects parameter 2 to be string, array given in <phpのパス>
が出てしまいます。
何か解決方法はありませんか?
0337nobodyさん
2013/10/12(土) 05:26:34.97ID:???PHP使ったこともないPerl厨が荒らしにきたのが丸わかり
0338nobodyさん
2013/10/12(土) 06:18:16.36ID:???0339nobodyさん
2013/10/12(土) 07:55:50.69ID:RtoR0pty0340nobodyさん
2013/10/12(土) 08:28:13.04ID:???write() expects parameter 2 to be string, array given
配列じゃなくて文字列ちょうだいって言ってるんだから
$resultをimplode()とかで文字列にしないと
0341nobodyさん
2013/10/12(土) 09:03:56.48ID:???0342nobodyさん
2013/10/12(土) 11:06:02.06ID:???配列の内容確認だけなら
fwrite($fp, print_r($result, true));
とか
0343nobodyさん
2013/10/12(土) 11:38:40.17ID:???http://toro.2ch.net/test/read.cgi/hp/1381154429/594
0344nobodyさん
2013/10/12(土) 12:05:42.75ID:Su3ioHiIプログラムの全てをクラスに入れたいのですが
$inst = new MyClass();
exit;
$inst = new MyClass();
$inst->main();
exit;
この場合、constructだけのほうが良いですか?
0346nobodyさん
2013/10/12(土) 12:15:59.20ID:Su3ioHiIMVCのControllerです。
0347nobodyさん
2013/10/12(土) 12:40:40.80ID:???0348nobodyさん
2013/10/12(土) 12:45:22.80ID:???■ このスレッドは過去ログ倉庫に格納されています