トップページ⇒php
1002コメント311KB

PHP質問・雑談スレ 2【初心者お断り(ROM歓迎)】©5ch.io

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん 転載ダメ©2ch.net2016/10/17(月) 21:44:12.59ID:???
PHP関する質問や雑談をするスレです。
初心者お断り(ROM歓迎)と書いてますが、初心者用のスレが用意されているからで、
難しい質問や話題をしなければいけないわけではありません。
PHPマニュアルの読み方を概ね理解していて、関数リファレンスが正しく読める方用のスレです。

PHP未導入の方や、手取り足取りが必要な初心者の方はム板のくだスレへどうぞ。
http://echo.2ch.net/tech/ (【PHP】で板内を検索)

前スレ
http://tamae.2ch.net/test/read.cgi/php/1461283091/

その他リンク
・PHPマニュアル
 https://secure.php.net/manual/ja/index.php
・コードテスト・貼り付け用
 http://ideone.com/
・プログラミングのお題スレ Part8 (求PHPer参戦)
 http://echo.2ch.net/test/read.cgi/tech/1444216746/

このスレで扱う話題
・PHPのコード,設定や設定値に関する質問
・常識的範囲内でのコードレビュー依頼・改良相談
・PECL,PEARに関する質問
・PHP新機能やPHP関連トレンドの話題
 (FWや非公式ライブラリの話題や特徴比較は良いが使い方から先の話題は専スレへ)
・PHPのバグ発見報告・公式に報告する前の検証依頼

このスレで扱わない話題
・直接関係ない○○特有の質問(専スレへ)
 (HH,エディタ,IDE,サーバ,OS,DB,SQL,FW,テンプレート,非公式ライブラリ・アプリケーション等)
・PHPの改造
0875nobodyさん2017/02/01(水) 15:32:36.08ID:???
isset()って 1 とか 'test' とか渡すとsyntax errorで怒られるけど、これ関数じゃない?
0876nobodyさん2017/02/01(水) 16:29:08.11ID:???
if isset($PHPer){echo "関数";}
0877nobodyさん2017/02/01(水) 17:25:46.13ID:???
>>875
言語構造
0878nobodyさん2017/02/01(水) 19:18:55.57ID:???
>>875
マニュアル読む癖をつけたほうがいい

http://php.net/manual/ja/function.isset.php
isset() は何らかの値が渡された 変数の場合のみ動作します。そうでない場合、パースエラーとなります。 もし 定数 が設定されているかどうかをチェックする場合は、 defined() を使用してください。
注意: これは、関数ではなく 言語構造のため、可変関数 を用いて コールすることはできません。
注意:オブジェクトのアクセス不能なプロパティに対して isset() を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。
0879nobodyさん2017/02/01(水) 19:19:30.82ID:???
phpって関数にしか見えない言語構造が多い気がするけど、
他の言語もそうなの?
0880nobodyさん2017/02/01(水) 19:41:06.22ID:???
function_exists('isset') or die('not a function');
0881nobodyさん2017/02/03(金) 14:28:22.41ID:???
>>877-878
ありがと
マニュアルは目を通したつもりだったんだけど注意のところ見逃してたごめん
可変変数もダメなんだなあ
0882nobodyさん2017/02/03(金) 15:14:11.12ID:BPtags4A
facebookって開発言語なに?
0883nobodyさん2017/02/03(金) 23:04:39.09ID:???
B言語使ってるよ
0884nobodyさん2017/02/03(金) 23:16:47.84ID:???
>>882
PHPに決まってるだろ、言わせんな!
0885nobodyさん2017/02/03(金) 23:22:23.40ID:???
言わせたかったんだ、ごめん
0886nobodyさん2017/02/03(金) 23:30:45.78ID:???
ペチパーが!!
0887nobodyさん2017/02/03(金) 23:39:02.33ID:???
だが少し待って欲しいHHVMはPHPのように見えるPHPのような何かなのではないだろうか
0888nobodyさん2017/02/04(土) 01:31:34.47ID:Rj9LF3nc
>>884
嘘つくんじゃねーよ。沖縄県民
0889nobodyさん2017/02/04(土) 01:34:05.86ID:???
なんで沖縄なんだよ
0890nobodyさん2017/02/04(土) 08:46:43.40ID:???
>>889
日本人が一番嫌がるレッテル貼りは「南朝鮮人」もしくは「在日」。しかしあまりに使いすぎたので効果が薄れてきた
最近基地問題で流行りの「沖縄人」を使ってみたが、リゾート地、朝鮮人の市民団体、中国人の市民団体とイメージが広すぎる

結論を言うと、煽りやレッテル貼りとしては失敗。もう少しイメージが絞られたものにするべき
そういう意味では「南朝鮮人」に勝るものはないと言えるだろう
0891nobodyさん2017/02/04(土) 09:47:53.23ID:???
うわー、ネトウヨこっちくんなよ・・・
0892nobodyさん2017/02/04(土) 11:49:01.40ID:QsE+sxbw
https://www.youtube.com/watch?v=quIHgwuF6r4&;sns=em
0893nobodyさん2017/02/04(土) 21:14:54.28ID:???
[1,2,3,4]
[2,1,4,3]

上のような配列順序がバラバラでもtrueを返したいのですが、どのような比較方法があるでしょう
0894nobodyさん2017/02/04(土) 21:21:25.15ID:???
array_diff()
0895nobodyさん2017/02/04(土) 21:26:02.13ID:???
業務アプリばっかつくっててDBばっか使ってるとPHPの配列用関数なんか全く覚えないから
>>894 みたいな回答がすらっとでてくるのは脅威
0896nobodyさん2017/02/04(土) 21:57:52.05ID:Rj9LF3nc
>>893
みたいな意味不明な質問が出る事がゆとり教育の弊害
0897nobodyさん2017/02/04(土) 23:42:29.34ID:???
まあ確かに意味不明は一理なくもない
0898nobodyさん2017/02/04(土) 23:49:40.69ID:???
意味の推定は可能だが日本語としては意味を成していない
0899nobodyさん2017/02/05(日) 00:14:30.88ID:jA2houVQ
893みたいなやつとは一緒に仕事したくない。
間違いなく、コミュニケーション能力の低さ故に仕様確認で喧嘩になりそう。


なんでプログラマって言語障害者が多いのかな?
0900nobodyさん2017/02/05(日) 00:17:57.77ID:???
phpのテストメソッドの命名で

・testUnkoMan(接頭辞にtestでキャメル)
・it_unko_man(接頭辞にitでスネーク)

どっちの形式が良いか悩ましいんだけど、ベストプラクティスみたいなの書いてる記事ないかね
0901nobodyさん2017/02/05(日) 00:20:38.51ID:???
>>900
いい年して小学生みたいな命名やめた方が良い
0902nobodyさん2017/02/05(日) 00:20:44.15ID:jA2houVQ
うんこ男をテストしてどうするんだばーか。
0903nobodyさん2017/02/05(日) 00:22:01.70ID:???
>>902
ageガイジは黙ってろ氏ね
0904nobodyさん2017/02/05(日) 00:26:24.71ID:???
>>900
TDDなら上, BDDなら下
0905nobodyさん2017/02/05(日) 08:44:02.70ID:yhK5jENS
PHPと関係ないんですが、、パーミッションについて質問があります
共有レンタルサーバー サクラを契約しています
デフォルトで、下記の内容でパーミッションが割り振りされています。

705: /home/username/

そこで、サイトを公開するにあたって、ドメイン名ディレクトリを作る必要があります。
/home/username/www/ドメイン名/

このドメイン名のディレクトリのパーティションを 777 に変更しました

そこで質問なのですが
同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。

また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
0906nobodyさん2017/02/05(日) 09:43:44.06ID:JQZvwDcv
905 すいません、解決しました。ありがとうございました。
0907nobodyさん2017/02/05(日) 11:16:50.78ID:???
なぜPHPと関係ないと分かっていて投下したのか
0908nobodyさん2017/02/05(日) 11:30:51.61ID:jA2houVQ
マルチだから
0909nobodyさん2017/02/05(日) 20:53:05.34ID:???
>>896 >>899みたいなキレやすくて理解力ないやつもいらねえ
IQ低いのに偉そうじゃん
俺はパッと見て何言ってるかわかったし>>894もわかったし・・・
0910nobodyさん2017/02/05(日) 20:55:08.48ID:???
PHPマニュアルを見ろとは言わないけど、文字列の操作(最低でもtrimとstrが頭につくもの)と
配列の操作の関数だけは最初で暗記しようね
0911nobodyさん2017/02/05(日) 21:01:50.63ID:???
phpマニュアル、詳しいのはいいんだけど重要度を書いてほしいな
似たような関数があったり、使わなくていいものとか多くて困る
0912nobodyさん2017/02/05(日) 21:53:01.64ID:???
いやphpマニュアルを見ろと言うべきだろう
暗記しないでもいい、必要なときに必要なビルトイン関数があるか調べればいいだけ
どうせよく使う関数は自然と覚える
0913nobodyさん2017/02/05(日) 22:01:19.05ID:???
他の関数でも出来る
関数を組み合わせれば出来る

もっとベターな方法があるなんてのは
知らないから使わなかっただけなんだから気にすんな
0914nobodyさん2017/02/05(日) 22:21:39.40ID:???
マニュアル読んでおいた方が結果的に早いんだが、なぜか初心者は頑なに読もうとしないんだよな
0915nobodyさん2017/02/05(日) 22:53:03.52ID:???
>>893の2値が外から受けとる変数で、数が同じでないならば、
array_diffの1番目の引数は数が多い方にしないと、正確な結果がとれないからそこだけ注意。
数多くなければsortしてそれ比較するのも直感的にわかりやすくてありだと思う。
片方の配列の値を1個ずつもう片方の配列にarray_searchかけるなんて手法もある。
最悪計算量はsortするのと同じぐらいだけど1週目でfalse判定も可能。
0916nobodyさん2017/02/05(日) 22:58:04.19ID:???
ID出して煽るやつ=ただただ頭の悪いC#erのキチガイ
読点はつけるのに句点はつけないやつ=盛り上げてると思ってる自演キチガイ
0917nobodyさん2017/02/05(日) 23:07:55.89ID:???
他のやつはどうでもいいけど、>>916 おまえだけは黙ってろ
0918nobodyさん2017/02/05(日) 23:10:04.98ID:???
おっと自演キチガイがお怒りだwwwwww
>>911-912
皆の者この恥ずかしいやり取りをみよwwww
0919nobodyさん2017/02/05(日) 23:11:19.94ID:???
なぜC#であってCでないのだろう
0920nobodyさん2017/02/05(日) 23:12:07.69ID:???
そりゃ>>764で自己紹介してるからよ
0921nobodyさん2017/02/05(日) 23:15:10.57ID:???
C#便利だからね
なんでもサクッと作れて良い
0922nobodyさん2017/02/05(日) 23:20:02.68ID:???
VSにGUIエディタがあるからね
JavaSsciptかじってればWindowsアプリなんか楽勝だし
Webアプリしか出来ないとか言ってるお前らにも作れるよ
0923nobodyさん2017/02/05(日) 23:21:11.24ID:???
>>918
キチガイはおまえだよ、ゴミクズは黙ってろ
0924nobodyさん2017/02/05(日) 23:25:12.65ID:???
>>923
自演してごめんなさいって言えば丸く収まったのになwwwww
>>864痛すぎるぞお前wwwwww
0925nobodyさん2017/02/05(日) 23:41:23.04ID:???
>>924
キチガイは黙ってろ
0926nobodyさん2017/02/05(日) 23:49:29.62ID:???
盛り上げてやってるならもっと面白い返ししてみろよwwww
融通がきかず口数少ないコミュ障の典型的なプログラムオタクだなお前wwww
もう寝るしまた遊びに来てやるからせいぜい自演しとけやwwwwww
0927nobodyさん2017/02/06(月) 00:01:31.34ID:sbN7DgFT
>>926
マジキチは黙ってろ
0928nobodyさん2017/02/06(月) 00:41:32.55ID:fRp1AG0N
>>916
真正キチガイのお前がいっても説得力ないよ。
0929nobodyさん2017/02/06(月) 11:23:10.10ID:???
PHPマニュアルで、ナビバーの下にあるリンクで「前のページ」と「次のページ」を
キーボードショートカットで移動できる拡張機能作ったけど需要ありますかね
上のリンクだけじゃなくて、サイドバーのメニューにも移動できて、
下へ辿っていくこともできます
金が無いのでストアじゃなくgoogle driveでの自主配布になるんですが・・・
(ただ自主配布の信用できない拡張機能はセキュリティ上問題があることが多く・・・)
0930nobodyさん2017/02/06(月) 11:34:30.15ID:???
phpマニュアルだけじゃなく他のページにも色々対応できるようにすればいいんじゃないか?
とりあえず俺は使わないかな・・・

後、検索したらこういうのがあるらしい
http://thesaibase.com/chrome/autopagerize
0931nobodyさん2017/02/06(月) 11:41:24.51ID:???
いや、オートページャーとは違うんですよ
それだとできないから自分で作ったんで・・・
ま、いいです
0932nobodyさん2017/02/06(月) 14:17:46.07ID:???
一応正解書いとくか。

>>905
> 同じサーバー内の他のユーザが、このドメイン名のディレクトリにアクセスできちゃう なんてことはありますか?
ある。

> 自分の認識では /home/username/ の段階で弾かれると思っています この認識で大丈夫でしょうか。
間違い。

> また ドメイン名ディレクトリを 777 にすることで何かセキュリティ的にまずいことはありますか?
まずい。
0933nobodyさん2017/02/06(月) 22:31:50.67ID:???
自分のWEBサービスでユーザーページがあるとして、
「users/1」のアクセス数をアナリティクスからapiで取得してjavascriptでグラフ化…とか可能ですか?
0934nobodyさん2017/02/06(月) 22:33:07.98ID:???
それはPHPの質問じゃなくね
0935nobodyさん2017/02/06(月) 22:37:46.12ID:???
>>933
できるけど、アナリティクスの機能に頼ったほうが良い
自動レポート機能もあるからわざわざapiとか覚えなくても良いよ
0936nobodyさん2017/02/07(火) 00:01:00.13ID:???
>>935
いえ、WEB側で表示させたいんですよ
0937nobodyさん2017/02/07(火) 00:40:19.36ID:???
どう見てもPHPではない
0938nobodyさん2017/02/07(火) 00:43:36.62ID:???
>>936
そうか、がんばれ
v3でいけるならv3使ったほうが良いぞ。v4はうまく動かなかった。今思えば重かっただけなのかもしれんが
0939nobodyさん2017/02/07(火) 12:29:03.90ID:LoqCooPa
PHPで広告ブロックソフトを入れているかどうか
判定したいのですがどう判定すればよいでしょうか?

この要件を満たすWordPressのプラグインがあるので
どうやって判定しているのか気になってます。
0940nobodyさん2017/02/07(火) 12:41:06.44ID:???
jsじゃね。phpじゃ無理と思う
テキトーに要素の間に広告入れて、要素間がくっついてたら広告ブロック入ってる
あとはajaxで検知したデータを取得すればok
0941nobodyさん2017/02/07(火) 14:10:41.31ID:LoqCooPa
>>940
サンクス!!

そーいう判定をしてるのね。
0942nobodyさん2017/02/07(火) 16:04:18.38ID:PKNwz2mK
php print_r_output.php > print_r.txt って感じで
1回のprint_r( $array, true )の結果を出力しただけのテキストファイルを、
phpから読み込んで、配列とかに格納してくれる関数とかってあります?
0943nobodyさん2017/02/07(火) 16:12:27.32ID:???
http://stackoverflow.com/questions/7025909/how-create-an-array-from-the-output-of-an-array-printed-with-print-r

普通はシリアライズするんだがな
0944nobodyさん2017/02/07(火) 16:23:00.90ID:???
var_export
0945nobodyさん2017/02/07(火) 16:23:57.32ID:???
>>943
さんきゅー今から見る
いやあ後で使う予定じゃなかったから普通に出力して溜め込んでチェックして終わってたんだ
0946nobodyさん2017/02/07(火) 16:25:24.73ID:???
var_exportはマニュアル見ればわかるけど欠点があるから
0947nobodyさん2017/02/07(火) 16:31:45.54ID:???
var_exportよりserializeの方がよかった気がする
理由は忘れた
0948nobodyさん2017/02/07(火) 16:51:59.11ID:???
一応報告、自分の用途は多次元配列だったけど>>943のprint_r_reverseで解決
パーサ書きたくないと思ってたとこだったので非常に助かった
0949nobodyさん2017/02/07(火) 21:26:33.39ID:???
気になったんだけど、価格.comって誰が商品の登録してるの?
メーカーとかの詳細情報もいちいち従業員が入力してる…っていうのはさすがに無いか
0950nobodyさん2017/02/07(火) 21:55:56.79ID:???
小売かメーカーが申請するんだろう
あれだけ大手ならメーカーからどんどん情報が来ると思う
0951nobodyさん2017/02/07(火) 22:20:56.61ID:???
メーカーはオンラインサポート用に商品情報とかデジタルデータ作るだろうし
価格comとはwin-winだしそういうデータを提供してもらってんじゃね
そういうコネがないところは人力だと思うけど
0952nobodyさん2017/02/08(水) 19:44:36.27ID:???
session_register()系 廃止するし、今後は$_SESSIONいじってや

となってるけど、なんでそうなったのか歴史的経緯を知りたい
0953nobodyさん2017/02/08(水) 19:50:15.04ID:???
廃止するっていうかされたよ
0954nobodyさん2017/02/08(水) 20:22:25.81ID:???
>>953
なんで廃止したのかの理由が知りたい
$_SESSION直接いじるのと関数経由するのとで なんか違うの?
0955nobodyさん2017/02/08(水) 20:33:30.90ID:???
例えば読み込もうとしたファイルがなかった時にエラーが出るのを防ぐためにはどうしますか?

1. 読み込む前にそのファイルが存在するか読み込み可能か調べる
2. @でエラー制御をする
3. set_error_handlerでエラーをErrorExceptionに投げてcatchブロックで対応する

2と3はエラーになる可能性承知でって感じですが
毎度色々エラーになるの考慮して実装してたら大変だしコード長くなるので
2.3もありかなと思うのですがどうでしょう?
0956nobodyさん2017/02/08(水) 20:38:30.28ID:???
@で制御はその後のコードも実行されるからマズイですね
それ除外で
0957nobodyさん2017/02/08(水) 20:50:54.34ID:???
https://github.com/php/php-src/blob/PHP-5.3/ext/session/session.c
歴史的経緯ってどうやって調べるんだろうね、俺も知りたい
ソースの見方までは分かるんだけどコメントってどこに書いてるんだろう
0958nobodyさん2017/02/08(水) 20:54:05.08ID:???
>>954
> session_register() は、その変数名のグローバル変数を現在のセッションに登録します。
0959nobodyさん2017/02/08(水) 20:54:56.84ID:???
>>957
メーリングリスト探すといいよ
0960nobodyさん2017/02/08(水) 21:09:54.05ID:???
>>959
あーそういやマニュアルにもメーリングリストがどうこうって書いてたな
ありがとう
0961nobodyさん2017/02/09(木) 18:43:39.42ID:???
ソケットサーバ作ってブラウザからアクセスして
ブラウザから送ってきたHTTPリクエストヘッダを表示して接続を切るっていうコードを書いたんですが

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, '127.0.0.1', 80);
socket_listen($sock, 5);

while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_close($con);
}

これってコード間違ってます?
>echo socket_read($con, 2048);
この部分がいっぱい表示されてしまいます
マニュアルはソケットの仕様を知ってる人向けの簡素な説明でよくわからなくて
0962nobodyさん2017/02/09(木) 21:16:32.94ID:???
>>955
起こりうるエラーを全部テストコードに書くんよ
0963nobodyさん2017/02/09(木) 21:21:40.82ID:???
>>961
読み込んだ長さを見てbreak
0964nobodyさん2017/02/10(金) 10:56:01.73ID:???
$obj->{'prop'}
(new Class)->method()

みたいな小技集ないのかね
0965nobodyさん2017/02/10(金) 11:20:52.49ID:???
マニュアル最新版のリリース見ていけばどうだろう
0966nobodyさん2017/02/10(金) 13:52:39.73ID:???
>>963
何をしてもsocket_close($con)に達すると
echoした文字列が複数回表示されます
数からしておそらく\r\nの数分表示されてる気がします
0967nobodyさん2017/02/10(金) 15:37:51.81ID:???
>>966
受信した文字列の長さを見たら?
0968nobodyさん2017/02/10(金) 16:06:20.73ID:???
>>967
$conで接続したクライアントに対して
こちらがsocket_closeするまでデータ来るのを待ってる感じだと思うのですが
socket_readで長さみて一定の長さまできたらsocket_closeしても
その一定の長さまで切り詰めた文字列が複数回表示されるだけです
0969nobodyさん2017/02/10(金) 16:55:17.09ID:???
一方的にsocket_closeせずに
試しにちゃんと応答してからsocket_closeしてみましたが
こちらがちゃんと応答すれば正常な動作になり
コンソールに1度だけ表示されるようになりました
うーんよくわからない・・・
0970nobodyさん2017/02/10(金) 17:01:03.60ID:???
>>961との差はクライアントへのsocket_writeを加えただけですが
一応コードです

while ($con = socket_accept($sock)) {
echo socket_read($con, 2048);
socket_write($con, $res = "HTTP/1.1 200 OK\r\n\r\n", strlen($res));
socket_close($con);
}
0971nobodyさん2017/02/10(金) 20:22:12.24ID:???
読み込んだ長さを見てbreak
0972nobodyさん2017/02/10(金) 21:37:46.81ID:???
while ($con = socket_accept($sock)) {
while (true) {
$buf = socket_read($con, 2048);
if (strlen(trim($buf)) > 0) echo $buf; break;
}
socket_close($con);
}

>>971
こういうことでないならば
すみませんがコードで示していただけますか?
0973nobodyさん2017/02/10(金) 21:40:27.10ID:ajYu3lk8
2chで質問してるやつは例外無く友達がいない。
0974nobodyさん2017/02/10(金) 22:20:54.93ID:???
犯罪者の98%はこの食べ物を日常的に食べている
0975nobodyさん2017/02/10(金) 22:51:48.16ID:ajYu3lk8
GETパラメータをDBに保存してます。

例えば、 hogeword.com/search_word=さくらんぼ
といったアクセスを想定して、その検索ワードをDBに保存しています。
すると、↓の様な不自然な検索が行われている様です。

これって攻撃を受けてますか?
最悪サイト自体は個人情報は何もないのですが、、、

999999.9 /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39--
999999.9) /**/uNiOn/**/aLl /**/sElEcT 0x393133353134353632312e39,0x393133353134353632322e39 and(0=0
レス数が950を超えています。1000を超えると書き込みができなくなります。