【PHP】下らねぇ質問はここに書き込みやがれ 8 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/15(水) 00:41:22.79ID:ko4BTSP20
PHPに関する下らない質問用避難スレです。
まず読むこと【PHPマニュアル】
http://www.php.net/manual/ja/

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 7
http://echo.2ch.net/test/read.cgi/tech/1478657006/

次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/05/11(木) 20:53:36.93ID:bHhk+rd90
>>228
マニュアルに書いてましたか・・・
勉強不足でした。ありがとうございました
230デフォルトの名無しさん (ワッチョイ ff87-y58w)
垢版 |
2017/05/13(土) 14:56:11.69ID:DB8bCe2a0
みなさん、画像ファイルのアップロード先フォルダはどのようにしていますか?
単純に/uploadsみたいなところに入れますか?
それともWordpressみたいに
/uploads/2017/05というように日付でフォルダ分けして管理しますか?
2017/05/13(土) 15:15:34.69ID:EKwOhdT+0
状況に応じて変わるとしか言えん
どういう使い方するか考えればおのずと決まるはず
2017/05/13(土) 16:37:08.01ID:DB8bCe2a0
確かにそうなんですが、
ある程度のスタンダードな考え方・分け方は知りたいと思いまして。
他のサイトを調べると日付で分けることが多いみたいなんで、
大量に画像をアップロードする可能性があるなら、そうしてたほうが無難なんですかねぇ
2017/05/13(土) 19:20:12.73ID:bYeLo1gSa
imageフォルダでいいじゃん。
2017/05/15(月) 00:06:32.69ID:TcVKQbFq0
>>230
何故フォルダに分けてるのかは、お前は分かっていないということだな? 231、233も含めて
235デフォルトの名無しさん (ワッチョイ ff87-y58w)
垢版 |
2017/05/15(月) 11:21:27.48ID:1833Pji90
Configure::read()

という書き方って専門用語でなんて言うのでしたっけ?
PHPのバージョンによってもこの書き方が使える場合とエラーになる場合があり、
それを調べようと思ったのですが、用語をど忘れしてしまいました
2017/05/15(月) 11:48:48.70ID:1833Pji90
疑似変数ですかね。
色々と質問させていただきましたが、
マニュアルを見逃すことが多いので、注意したいと思います。
2017/05/15(月) 12:28:14.73ID:Nyf5aX+Ca
スコープ定義演算子
2017/05/15(月) 17:52:15.38ID:dvw/ajfi0
(続き)今日はシフトの非番なのでやってみました

------------------
>>211の ini_set('display_errors', 1);  は
failed to open stream: Permission denied in ・・・ test01.php
となりました。 ※長々と文章が続きますのでここだけ抜粋

------------------
>>212
例外処理でSplFileObjectを使ってみました。
try {
$obj = new SplFileObject("abc.txt", "w");
} catch (Exception $e) {
//エラー処理
echo $e->getMessage();
}

これだと 500 (Internal Server Error) が出ます。

set_error_handler は未だです

------------------
>>217の「fopen()の戻り値$handleを調べて」で
$handle = fopen("abc.txt", "w");// abc.txtを書き込みモードで開く
print $handle;
をやってみましたが、何も表示されません。

------------------
現時点での結論は「原因が全く分からない」です。
2017/05/15(月) 18:17:58.64ID:Jjv98UEoH
>>238
> >>217の「fopen()の戻り値$handleを調べて」で
> $handle = fopen("abc.txt", "w");// abc.txtを書き込みモードで開く
> print $handle;
> をやってみましたが、何も表示されません。
>
> ------------------
> 現時点での結論は「原因が全く分からない」です。

いやいや、何も表示されないというのは、fopen()が失敗してるってことだよ。
falseをprintしても何も表示されないから。
成功してたら、"Resouce id #5"みたいに表示されるはずだから。
2017/05/15(月) 18:24:42.83ID:Jjv98UEoH
つか、

>>238
> >>211の ini_set('display_errors', 1);  は
> failed to open stream: Permission denied in ・・・ test01.php
> となりました。 ※長々と文章が続きますのでここだけ抜粋
エラーの原因出力されてるじゃん・・・
2017/05/15(月) 19:55:48.98ID:Vb5ZKsqrM
とにかくエラーログがてるところまで何とかしろ
そこにたどり着く前に色々やっても何も分からんだけ
先に進まず、まずはここだけやれ

そしてエラーログが出るようになったら必ずログを確認しろ
500エラーなら必ず理由がログに出る
2017/05/15(月) 20:17:22.18ID:nSGL9egfa
>>238
せめてさ, エラーメッセージでググるくらいのことはしてくれよ
2017/05/15(月) 21:04:15.00ID:fnDHHxZB0
ローカルで使用する時に別ドライブから画像参照したい
htmlだと
<img src="file:///I:/img/0000.jpg">
こう書けば別ドライブから画像を参照して表示できるのだけど
PHPではこう書いてもできない。
どうすればいいでしょうか?
2017/05/15(月) 21:15:35.34ID:nSGL9egfa
>>243
http://php.net/manual/wrappers.file.php
2017/05/15(月) 22:19:38.89ID:dvw/ajfi0
>>239-242
FFFTPでサーバー上の目的テキストのパーミッションを開き、権限者「その他」で「書き込み」
にチェックマークを入れたところ、print $handle; は Resource id #3 が出ました。
※Chromeで実行しましたがエラーは出ていません

文字化けしていますが曲りなりに成功しました。 有難うございます。
2017/05/15(月) 22:44:25.11ID:dvw/ajfi0
(追記)
文字化けは、目的テキストの文字コードを UTF-8 にするため
$str = "テスト文章です";
$str = mb_convert_encoding($str, "UTF-8", "EUC-JP");

でOKでした。
何故か "EUC-JP" でなくファイルの元コード "sjis" や "Shift_JIS" から
変換すると文字化けのままです。
2017/05/16(火) 00:20:46.81ID:P5MMw6+60
>>244
お返事ありがとうございます。
ローカルだとうまくいきませんでした。
何か別の方法を考えてみます。
2017/05/16(火) 00:55:45.12ID:hc9PncuC0
>>247もそうだけど、上手くいかないならまずはアクセスログ、エラーログを見よ
ログがでてないならまずはログを出すところから始めろ
PHP ログ 出力 でググって調べろ
上手くいかない場合、ここで聞くよりログを見た方が確実だし早い
2017/05/16(火) 01:19:07.84ID:T1OkV7Tma
>>235
staticメソッド
2017/05/16(火) 11:16:48.66ID:3A9hLCJa0
冷たいようだが手遅れになる前にハッキリと言っとく

プログラムが意図した通りに動かない時
自分でエラーメッセージを確認してググるなり本なりで調べて解決しようとして
私はこう思ってこうしたのだけど動きません

という質問の仕方なら分かるし将来性はある

動きません
分かりません

という質問の仕方しかできないなら、ハッキリ言うがプログラミングには向いてない
手遅れになる前に他の業界にいきましょう
2017/05/16(火) 12:22:29.62ID:CV++bHOB0
>>250
でもそれはアナタが慣れているから。
初心者はエラーメッセージの出し方も分からないないし、長々としたメッセージの
どこを見れば良いかも分からない。

優越感の視点で書いちゃダメだよ。それに

> ハッキリ言うがプログラミングには向いてない

オマエ、FPGAのプログラミングもやったことあるの?
プログラミングなんてPC上でカタカタやって終わりのモノだけだと思ってないか?

それに資料の殆どが英語という言語もあるんだぜ
2017/05/16(火) 12:29:18.04ID:EpHNLcPNa
プログラミングやってたら知りたい情報が英語で書かれてることなんて珍しくもないし、そんなとこで優越感持たれても困る
業界どうこうの話じゃなくて、自助努力の痕跡が見つけられるかどうかでしょ
2017/05/16(火) 13:01:25.46ID:3A9hLCJa0
>>251
日進月歩の世界だから自分の力で調べて解決する能力のない人は向いてないってだけの話
長ったらしいエラーが出たら出たで、今度はそのエラーをググればいいじゃないか
昔はググる事すらできなかったのにさw

別にプログラミングに限った話でもない
20半ばぐらいまでならまだ間に合うから、さっさと業種を変えた方がいい
手遅れになった人を何人も見てきてるし30過ぎまで引きずるとほんと悲惨だよ
お前そんなんじゃ結婚もできないだろって奴ばっか

FPGAなんて言葉を出して優越感()に浸ってるお方には理解できないのかもしれないけどさw
2017/05/16(火) 13:04:24.73ID:UWwVfOAn0
というか物凄く親切丁寧なPHPのエラーですら読んで理解できないのはプログラム云々以前の問題だと思う
中学レベルの英語力すらないのか?
2017/05/16(火) 13:05:13.59ID:CV++bHOB0
>>253
要はエラーが出ない場合は、「エラーメッセージの出し方を教えて下さい」で、
あと「どの個所を見れば良いのですか?」 という2行を追加ということでOK?

あとFPGAの存在は知っておいて損は無いよ。
専用ツールをライセンス購入すると100万円超えるけど
2017/05/16(火) 13:10:06.47ID:7x0iPo/hM
優越感に浸ってる痛い255がいると聞いて
2017/05/16(火) 13:17:27.07ID:CV++bHOB0
このスレのキーワードは『優越感』になりそうだなw
2017/05/16(火) 13:25:03.78ID:Ilchk1CoH
>>251
オマエ、今年の痛い奴No1を更新したぞ
2017/05/16(火) 13:49:00.36ID:6VEQJAMtM
検証の手順と質問の仕方は考えてほしい
超能力者じゃないと答えられん質問投げられてもだれも得しない

エラーログを出す(まったく出てないなら出す方法から調べる)
エラーログを見る
エラーログをコピペしてググって調べる
再度ソースを確認する

それでも分からなければソースとエラーログを
他人に見られてはいけないところ(パスワードどか)以外全部ここにコピペで書け
そうすれば答えてくれる人も多くいると思う
ソースだけとかでも分からない場合が多いので
2017/05/16(火) 14:13:25.93ID:Ilchk1CoH
>>243
> ローカルで使用する時に別ドライブから画像参照したい
> htmlだと
> <img src="file:///I:/img/0000.jpg">
> こう書けば別ドライブから画像を参照して表示できるのだけど
「ローカル」というのがローカルPCで動作するHTTPサーバを指すなら、HTMLでも表示できないと思うが。
単にHTMLファイルをダブルクリックして表示することを指しているのなら、それに変わるPHPの使い方はできない。
2017/05/16(火) 14:34:15.08ID:l7Nmuuc60
テンプレに追記が必要か?

[プログラムが動かない場合]
* エラーは出ているか?
出ている→コードと内容をそのままコピペ
出ていない→error_reporting(E_ALL); ini_set('display_errors', true); をコード先頭に追記して実行して表示されるエラーをコピペ
262デフォルトの名無しさん (ワッチョイ 4367-r1sh)
垢版 |
2017/05/16(火) 16:49:20.37ID:WEDWU0250
すいません、以下質問させてください。
SQLで取得したデータを多次元配列に入れてHTMLのテーブルでリスト表示してます。
そのテーブルヘッダにドロップダウンリストを付けて、
複数条件の絞り込み機能を付けたいのですが、
配列をフィルタリングするにあたり、どのような関数またはロジックを使えばいいでしょうか。

キー(フィールド):
10列ほど。検索値の指定は全キー必須ではなく、指定したりしなかったりされる。
なお1列だけ数値データがあり、それについては範囲検索する。(0-3, 4-6, 7-9…)

配列形式:
Array (
[0] => Array ( [titile1] => hoge [titile2] => fuga [〜 [title10] => 2 )
[1] => Array ( [titile1] => piyo [titile2] => fuga [〜 [title10] => 7 )
[2] => Array ( [titile1] => hoge [titile2] => hogera [〜 [title10] => 5 )


例えば、title1をhogeでドロップダウン選択したら、
Array0と2のレコードを抽出して表示

よろしくお願いします。
2017/05/16(火) 17:06:54.87ID:dXmAFpYY0
>>262
配列をフィルタリングするんじゃなくて sql の where 句を変えるようにするんだよ
264デフォルトの名無しさん (ワッチョイ 4367-r1sh)
垢版 |
2017/05/16(火) 17:36:29.81ID:WEDWU0250
>>263
ありがとうございます。
1ユーザー単位の検索回数が多いであろうと想定して必要以上のDBアクセスを避けるために、
最初のページ読込で全データとったらあとは配列でなんとかしたかったのですが無理そうですかね…。
2017/05/16(火) 17:48:51.64ID:Ilchk1CoH
>>264
Javascriptで実装する範疇ですね。
Web制作板に適切なスレがあるかも・・・。

まぁ簡単に言えば、条件に適合する行は描画して、そうでない行はスキップすればいい。
それを全部自前で実装するか、何かのライブラリを使うか、フレームワークを使うか。
ライブラリは、https://datatables.net/とか。

これ以上は、Web制作板かな。(Javascriptの質問を重ねないように)
2017/05/16(火) 17:53:29.44ID:ekUh1gbRa
普通にarray_filterじゃダメなの?
2017/05/16(火) 17:58:06.48ID:Ilchk1CoH
>>266
クライアントでやりたいんだと思うよ。
268デフォルトの名無しさん (ワッチョイ 4367-r1sh)
垢版 |
2017/05/16(火) 18:08:30.13ID:WEDWU0250
>>265
やはり、いち関数とかでどうこうできないですかね…残念。
検索値のログを取りたくてPHPを選択してみた経緯でした。
JavaScriptではファイル書き込みなどのファイル操作ができないようなので。
ありがとうございます。
2017/05/16(火) 18:13:09.89ID:Ilchk1CoH
>>268
サーバにクエリ投げてPHPで実装すれば?
2017/05/16(火) 18:15:43.77ID:/gdfS9gt0
いや、PHPでもゴリゴリ実装すればできると思うよ
ログも取れるし
SQLで間引くか、表示の直前で間引くかすれば良い
当然、適切なSQLを生成して必要な情報のみ取得して表示した方がサーバには優しい
2017/05/16(火) 18:16:14.25ID:dXmAFpYY0
>>264
まずは普通に作ってみたらいいのにと思うんだけど。

>>265 がいうようにクライアントでフィルタをかけるなら、クライアントに全データを渡すことになるのは問題ないのか
 (配列にフィルタかける方法を知りたがってるんだからクライアントでのフィルタは意図していないと思っていたけど)
・セッションに保持するなら、データが更新されたときの整合性はどう担保していくのか

を考慮しないといけないんじゃない?
2017/05/16(火) 18:23:37.41ID:Ilchk1CoH
もう、全件Excelに読み込んで、Excelの機能でフィルタリングしちゃえ
2017/05/16(火) 18:30:03.35ID:l7Nmuuc60
RESTで必要な分だけJSONで取れるようにすればよいのでは
274デフォルトの名無しさん (ワッチョイ 4367-r1sh)
垢版 |
2017/05/16(火) 18:42:09.76ID:WEDWU0250
みなさん、ありがとうございます。

>>266
あらためて調べなおしてみたら、array_filterでいけるかもですね。
これだと検索キーのぶんだけ、ネストでぶら下げていかなきゃいけない…のかな。
とりあえずベタでやってみます。
数値の範囲指定検索がややこしそう…。

>>267
最初はJqueryとか使って動的にやれたらな〜と軽く考えてましたが、
検索値指定してボタン押したら、セッションで検索値と配列渡して飛び先のphpページで処理して表示する流れにしました。

>>269
クエリでやらないのは>>264に書いた理由でした。

>>270
そうですねー、あまり余計な負荷は避けたいかなと。

>>271
クライアントにはデータは渡したくないので、あくまでサーバー側で処理したいと考えてます。
おっしゃる通り、まずはトライしてみます。array_filterで。
セッションの部分はまだ勉強不足でして…宿題です。
(データ登録は数日に1回10件くらいなのでシビアに見なくても大丈夫…かな?)
2017/05/16(火) 21:08:45.69ID:6VEQJAMtM
アクセス多いならデータベースに負荷をかけない方法として
memcacheやradisなどのキャッシュサーバ使ったり
PHPのAPCキャッシュを使うことも検討するといいよ
いきなりは厳しいけど、徐々に勉強していけばいいと思います
2017/05/16(火) 21:11:58.31ID:6VEQJAMtM
Redisは正式にはキャッシュじゃなかった
キャッシュ的にも使えるよ、という意味です
Sessionよりもより効率的なので将来的にはここまで頑張って進んでほしい
2017/05/16(火) 21:29:08.64ID:9H3961U80
>>261
良いのでは?
スレタイを声に出して100回読んでみろと言いたいところだが>>250は真実だしな
口が臭い奴にお前口が臭いよとはっきり言う方がある意味では親切なのと同じで
向いてない奴には向いてないとはっきり告げるのも必要だ
綺麗事だけじゃ仕事は勤まらん
2017/05/16(火) 21:33:22.36ID:9H3961U80
>>274
既に誰かが書いてたらすまないが、初回のsql発行結果を元に配列ソート用のJavaScriptのコードをPHPで出力してやるなんてやり方もあるよ
もう少し詳しく書きたいんだがスマホからなのですまない
2017/05/16(火) 21:57:02.88ID:P5MMw6+60
>>260
> 単にHTMLファイルをダブルクリックして表示することを指しているのなら、それに変わるPHPの使い方はできない。

ありがとうございます。
それがわかっただけでも対策を立てることができるので助かります。
2017/05/17(水) 07:51:06.10ID:3lPWTVzo0
すいませんapcuみたいな有効期限付けれる kvs ライブラリで有名なの教えてもらえませんか
拡張機能ではなくcomposerで入れられるのがいいです
2017/05/17(水) 09:42:34.81ID:u2bs0BxyM
>>280
https://github.com/chatbox-inc-hoge/SimpleKVS
有名でもないし、有効期限の実装もまだかもしれん
PHPだけでの実装なら都度都度ディスクから読み書きするしかないだろうから色々と厳しそう
SQLite使えるならそこにKVS実装するとか
ぶっちゃけ、どこかにmemcachedプロセス立ち上げるのが一番速いと思う
282デフォルトの名無しさん (ワッチョイ d36e-SU9n)
垢版 |
2017/05/17(水) 11:50:09.98ID:3lPWTVzo0
>>281
ランキング的なものをjsonで書き出して普段は読み込むだけなのでファイルでもいいかなと
レンサバなのでmemcachedは難しそうです
ありがとうございましたm(__)m
283デフォルトの名無しさん (ワッチョイ 4367-r1sh)
垢版 |
2017/05/17(水) 12:56:49.09ID:lSa7TP7B0
>>276
そうなんですよねー。
いずれSQLはコールドデータ的にして、Redisにコピってそっちでやり取りできたらいいなあと。
Dockerとかで環境作れそうですけど、基本的な実装が終わったらトライしてみたいですね。
APCキャッシュは知らなかったので調べてみます。

>>274
そんなやり方があるんですね。
お時間あったらでいいのでもう少し情報いただると助かります、
自分のほうでも調べてみますので。

ありがとうございます。
2017/05/20(土) 12:45:16.74ID:juCOIKkd0
文字列の最後が「Part1」とか「Part23」と感じなってるんだけど
この数値の部分を取り出すにはどうすればいいでしょう?
285デフォルトの名無しさん (ワッチョイ 1b1f-GzPn)
垢版 |
2017/05/20(土) 13:22:04.09ID:+AHq9zzn0
正規表現でいいだろ。とくに高速にこだわなければ。
2017/05/20(土) 14:06:53.01ID:fTSvx8FL0
Partを空文字列に変換する
2017/05/20(土) 14:23:35.28ID:VyG0A5Zf0
Partが固定長ならsubstrが最速だと思う
2017/05/21(日) 00:05:30.55ID:GvMHZSOA0
>>284です。
正規表現でできました。
ありがとうございます。
2017/05/21(日) 12:28:59.50ID:ANSA2OhR0
【OS名】WindowsServer2012R2
【PHPのバージョン】5.4.9
【連携ソフトウェア】Apache2.2
PECL2.0.1.2(PHP5.4ThreadSafe)
Oracle12.1.0.2(x64)
OracleInstantClientBasic12.2.0.1.0(x86)
OracleInstant ClienODBC12.2.0.1.0(x86)
【質問内容】PHPからDB接続が失敗します。
アドバイスください。
そもそもこの組み合わせで動作しない?
【やったこと】
環境変数Path
OracleInstantClientBasicのbinを先頭に追加。
tnsnames.ora、sqlnet.oraの設定
httpd.conf
LoadModule php5_module "c:/php/php5apache2_2.dll"
php.ini
extension_dir = "c:/php5/ext"
※"ext"、"c:\php5\ext"に変えても同じ
extension=php_oci8_12c.dll
(extフォルダにphp_oci8_12c.dllを格納)
apache再起動・OS再起動
参考にしたサイト
http://www.php.net/manual/ja/oci8.installation.php
【判明していること】
apacheのerror.log…oci_connect undefined function
phpinfo…oci8の項目がない。
他の32ビットアプリからOracle接続できています。
2017/05/21(日) 19:05:16.60ID:YAwwHXxQ0
extentionの組み込みに失敗してるようだから、
試しに他のextention組み込んでみれば?
それもダメならそもそもextention動的に追加できない環境とか
2017/05/21(日) 21:24:59.33ID:rRI3ub450
phpまったく分からない初心者で申し訳ないんですが、こちらの(http://www.punyu.net/php/oekaki.php)お絵かき掲示板をサイトに設置したいのですが、設置方法通りにやっても
Parse error: syntax error, unexpected '}' in ""/poti/htmltemplate.inc(312) : eval()'d code on line 147
このようなエラーが出てしまいます…
該当のファイルは全く手を付けていないので原因が全く分かりません。
本来ならば配布サイトで聞くことなんですが、かなり昔に更新停止してしまっているようで…。
ご教示いただけたら幸いです。
2017/05/21(日) 22:10:58.34ID:YAwwHXxQ0
>>291
そのサイト見ても403エラーしか表示されないのでよくわらかんが、
syntaxエラーということはプログラムが正しい記法で記述されてないということ
PHPのバージョン違いで対応してないのかもしれない

そもそも更新が停止されてるプログラムなんかセキュリティホールあるかもしれんし
素人ならなおさら使うべきではないと思う
ちゃんと今もメンテされてるところを探すべき
2017/05/21(日) 22:14:17.37ID:1J6dhIFt0
そのファイル見たらfor PHP4とか書いてあるんだけど
PHP4のEOLから約9年なんですけど
2017/05/21(日) 22:27:21.97ID:rRI3ub450
みなさんアドバイスありがとうございます。やっぱり古いのはだめなんですね…。
今までレンタルサーバーを使っていたのですが、こちらのhttps://github.com/funige/neo
ツールを使いたくて先程のお絵かき掲示板を設置しようとしていたのです…。こちらで普通につかえているようなので大丈夫だと思ったのですが…。
2017/05/21(日) 22:43:45.41ID:ANSA2OhR0
>>290
ありがとうございます。
明日試してみたいと思います。
2017/05/22(月) 11:49:09.51ID:d1deCwH80
訪問者が以前見ていたページからオススメのページを表示させたいのだけど
そういうことはできるのでしょうか?
詳細な情報は自分で調べてくるので大凡な概要を教えてください
2017/05/22(月) 11:58:52.67ID:wBUnNup00
出来るだろうけど、オススメのページを決めるのはあなただよね?
2017/05/22(月) 12:05:10.49ID:d1deCwH80
オススメというか同カテゴリの人気ページを表示させたいと思っています。
2017/05/22(月) 12:12:45.56ID:wBUnNup00
アクセスユーザーがログインする形なら、ログインしたユーザーID
ログインしいなら、クッキーを使ってアクセスユーザーを特定する
後はサーバー側で、人気ページ集計やオススメページを決定し
そのアドレスに誘導するなりお好きなように
2017/05/22(月) 12:17:01.23ID:d1deCwH80
ログインはないのでクッキーと言うものを使ってみようと思います。
ありがとうございました。
2017/05/22(月) 12:20:23.07ID:pVaUfe3+0
訪問者をどうやって区別するのか?
ログイン処理などでID管理してればID使えるし、そうでないならcookieで識別するか?

訪問者が以前見たページの情報をどこにどうやって保存するのか?
データベースに保存するのか、ファイルに保存するのか?

オススメのページをどう選定するのか?
ページのごとにIDをふって、オススメページの対応表を自分で作るのか?
ユーザの動向からオススメページを決める手法はかなり難しい
レコメンドアルゴリズムとか協調フィルタとかでぐぐれ
PHPにもライブラリはいくつかあるようだが、そのまま使うのは厳しいかも
2017/05/22(月) 13:31:50.42ID:o9BH+SoNH
>>296
「レコメンドエンジン」でググるといいよ。

たとえば、
「レコメンドエンジン(協調フィルタリング)をPHP+Redisで実装」
http://qiita.com/yudsuzuk/items/6de4650cb6d50236533e
2017/05/22(月) 16:59:57.37ID:0HmMgaGq0
switch文でcaseが30個超えたりする場合
もっと簡潔にする方法ってありますか?
単純に引数の値によって個々の返値を変えたいんですが、
シンプルな方法がわかりません。
2017/05/22(月) 17:17:20.84ID:QSwouUjx0
連想配列とissetでやるとか?
2017/05/22(月) 17:17:24.50ID:iPaI6PDPa
>>303
そのswitchが何回出て来るかによる
1回ならもうそのままでいいし繰り返し出て来るならケース自体をオブジェクトにしてexecute呼ぶだけにするとか
2017/05/22(月) 18:38:52.91ID:0HmMgaGq0
配列も考えたんですが、うまい方法がわかりませんでした。
出てくるのは一回だけなので、このままでいってみます。
ありがとうございました。
2017/05/22(月) 22:58:53.15ID:V20bT2wiM
連想配列の方がスマートだと思う
キーを定義ファイルとかにまとめればswitchよりもキレイで見やすい
308デフォルトの名無しさん (ワッチョイ d3b7-l8kh)
垢版 |
2017/05/23(火) 21:42:21.92ID:tFSGr+Xo0
外部ファイルをよみこんだけど、
その外部ファイル上からクラスを探してくれないときはどうすればいいですか?
たとえば読み込む側ファイルが、 use.phpだとして

<?php
require_once '/xxx/foo.php';

var_dump(require '/xxx/foo.php');
// => true

$foo = new Foo();
// => PHP Fatal error: Class 'Foo' not found use.php on line 7
→この 「not found use.php 」となっていることから、
そもそも読み込んだ foo.php 上を探してくれていない可能性があります。

もちろん、 foo.phpには
<?php
class Foo{
public function func($arg){
echo $arg;
}
}
とだけ記述されていて、極めてシンプルな検証用ファイルなので、
extendsとかimplementsとかそういった要素は関係していません。
なぜ new のときに読み込まれた側ファイルを探索してくれないのでしょうか。
309デフォルトの名無しさん (ワッチョイ d3b7-l8kh)
垢版 |
2017/05/23(火) 21:45:25.83ID:tFSGr+Xo0
すみません誤記がありました
上記の
var_dump(require '/xxx/foo.php');
で requireとなっていますが、
var_dump(require_once '/xxx/foo.php');
でもtrueが返ります。
2017/05/23(火) 22:14:10.10ID:J05KrQMn0
>>308
use.phpとfoo.phpを同一ディレクトリに配置して
'/xxx/foo.php' -> __DIR__.'/foo.php'
に書き換えて動かしたけど再現しない

実際に再現するコードは?
311デフォルトの名無しさん (ワッチョイ d3b7-l8kh)
垢版 |
2017/05/23(火) 22:29:34.43ID:tFSGr+Xo0
>>310
検証ありがとうございます。
今、私も foo.php と use.phpを同じカレントにおいて実行したところ
実行できました。
つまり、この問題は「foo.phpとuse.phpのディレクトリ(及び実行するカレントディレクトリ)が違う」
という問題が原因していることが新たにわかりました。
ディレクトリが違うと問題が起きるのでしょうか?
読み込んだモジュールと読み込んだ側、実行カレントなどの
ディレクトリを揃える手段ってありますか?
2017/05/23(火) 23:31:00.98ID:J05KrQMn0
>>311
ディレクトリaaaを掘ってそこにuse.phpを移動しかつ
__DIR__.'/foo.php' -> __DIR__.'/../foo.php'
として問題なく動作する

繰り返すが再現する条件と実行可能なコードを出せ
きちんと原因を知りたいならな
313デフォルトの名無しさん (ワッチョイ d3b7-l8kh)
垢版 |
2017/05/24(水) 01:00:45.23ID:rx1CXyDY0
>>312
すみません、自己解決しました。
上記の質問をしたのは autoloadの useが使えなくなり、
require_once(); もcomposerでインストールしたライブラリでは
使えなかったためで、
そもそもの useが使えない原因を特定しました。
私はwindowsから macにPCを変えたばかりで、macでは
\マークと\ を分けていることに気が付きませんでした。
option + \ で \ を出力できることを知り、 useの問題を解決しました。

require_once ();の問題は解決したことにはなりませんが、
とりあえず useで問題なく外部ファイルを読み込めるのでこれで解決
と思うことにしました。
お騒がせして本当にすみません。
314デフォルトの名無しさん (ワッチョイ d3b7-l8kh)
垢版 |
2017/05/24(水) 01:02:21.63ID:rx1CXyDY0
あれ、投稿したら ¥マークもバックスラッシュになっちゃいましたね・・
つまり、このことがよくわかっていなかったということになります。
2017/05/24(水) 13:44:43.12ID:AcsriXHn0
DIRECTORY_SEPARATOR
2017/05/24(水) 14:00:22.54ID:ktSIKEk8H
>>314
円記号とバックスラッシュは同じ文字コードです。
表示するフォントで見え方が違うだけ。
2017/05/24(水) 15:13:25.30ID:AcsriXHn0
>>316
せっかく環境まで書いてくれているというのに君は
2017/05/24(水) 15:28:30.43ID:ktSIKEk8H
>>317
macでは円記号とバックスラッシュは別の文字コードってことか?
2017/05/24(水) 15:35:58.82ID:ktSIKEk8H
なるほど、調べたらmacでは円記号は0xA5なのか。
それは知らなかった。
2017/05/24(水) 20:03:57.63ID:AcsriXHn0
>>319
utf-8で1バイト目が0xA5にはなりえないというのに君は
2017/05/25(木) 11:03:31.77ID:yXnULsJhH
>>320
何に関してレスされてるのかわからん。
macでバックスラッシュ使うところを0xA5の円記号を使っておかしくなったって話じゃないのか?
2017/05/26(金) 16:50:51.17ID:NBObyIGd0
コンストラクタの引数を使ってひとつの処理を実行するだけのオブジェクトを作る場合
コンストラクタに全ての処理を書いてインスタンス生成のみを行うのと
実行用のメソッドを作って、インスタンス生成直後に$foo->do()から実行するのと
どちらで作るのが一般的なんでしょうか?
処理は内部的な物で、どうしても必要なクラスという条件です
2017/05/26(金) 17:02:35.49ID:FvwfjnU+H
>>322
> 処理は内部的な物で、どうしても必要なクラスという条件です
なら、コンストラクタで実行するしかないよね。
2017/05/26(金) 17:03:43.14ID:EqtXAXHq0
インスタンス生成の必要がないように読めるが。
2017/05/26(金) 18:44:12.74ID:NBObyIGd0
確かに、必要なさそうでした・・
2017/05/30(火) 07:24:05.71ID:3I8BlO+30
>>322
生成&メソッド呼び出し
DIやテストを書いてみれば分かると思う
2017/06/03(土) 14:50:17.96ID:vHC5ipdf0
Webページのソースコードが文字化けするページを見つけたのですが対象方法がわかりませんでした。
どのようにすれば良いのでしょう?

$url="http://momoniji.com";;
$html=file_get_contents($url);
$html=mb_convert_encoding($html,'utf8','auto');
echo $html;
2017/06/03(土) 17:44:17.71ID:mWYP1opd0
文字化けではない

HTTPレスポンスヘッダのContent-Encodingを見れば分かるがレスポンスボディはgzip圧縮されている
だから結果をgzdecode関数にかければよい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況