【PHP】下らねぇ質問はここに 9

PHPに関する質問スレです

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

次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

レンタルサバのエラーディスプレイいじれるんならいじる

159デフォルトの名無しさん (ワッチョイ b365-9jjH)2018/04/21(土) 08:51:13.24ID:rs60STnG0
.htaccessか.user.iniでdisplay_errorsをoffにしてerror_logを設定しておくのが普通では

160デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/21(土) 23:07:08.13ID:GJF07GGo0
>>158,159
できましたありがとうございます

Xサーバーなんですけどphp.iniがおいてあったのでそのなかの
display_errors = Off
にしてみました

あとはじめから
log_errors = On
log_errors_max_len = 1024
ってなってるんですけどこれどこに表示されるんでしょうか

エラーがまったく表示されないのもそれはそれで困るかも…

161デフォルトの名無しさん (ワッチョイ b365-9jjH)2018/04/22(日) 00:03:29.49ID:ZgYxHCJE0
>>160
だからerror_logを指定城

162デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/22(日) 02:56:08.02ID:pMZeO9w/0
これは設定ファイルとかじゃなくてphpのなかに書く関数なんですか?
自分で関数も戻り値とかをハンドリングしてエラーをハンドリングして使う感じなんでしょうか?
エラーメッセージも自分で作らないといけないみたいだし…
そもそも構文エラーとかの場合これどうやってハンドリングすればいいんでしょう

デフォルトのエラーメッセージに絶対パスを表示させたくないだけなんですけど結構大変なんですね…

163デフォルトの名無しさん (ワッチョイ 1ae4-OGjV)2018/04/22(日) 06:44:08.35ID:ebslMH0y0
phpで設定を行う方法は主に3つ
・サーバ側の設定ファイル(php.iniやhttpd.conf)に直接書く方法
・phpスクリプトにini_set関数を使って書く方法
・専用の関数が用意されてればphpスクリプトに専用関数を使って書く方法

phpの設定がどこで行えるかは下記の通り
http://php.net/manual/ja/configuration.changes.modes.php

今回のerror_logは
http://php.net/manual/ja/errorfunc.configuration.php

PHP_INI_ALLなのでphp.iniに直接書くことも出来るし

ini_set関数を使ってphpスクリプトに書くことも出来る
http://php.net/manual/ja/function.ini-set.php

また同名の関数が用意されてるのでそれを使ってphpスクリプトに書くことも出来る
http://php.net/manual/ja/function.error-log.php

164デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/22(日) 11:55:07.76ID:pMZeO9w/0
うまくいかない…

エラーも表示されないし
ログファイルに書きこめない
パーミションもあけてるんですけど

せっかく丁寧に回答もらったのに申し訳ないんですがもうパス表示されたままであきらめます
phpのコードの勉強がしたいのにサーバーの設定だけで土日つぶれそう…

165デフォルトの名無しさん (ワッチョイ 8713-9jjH)2018/04/22(日) 12:15:18.27ID:RCbhuHms0
xamppでもいれて自鯖でやれよ
レンサバでやる意味がわからん

166デフォルトの名無しさん (ワッチョイ ff73-fvqh)2018/04/22(日) 22:52:07.39ID:6Gp3Qhv/0
>>164
<?php
ini_set('display_errors', 0);
ini_set('log_errors', 'On');
ini_set('error_log', '/home/アカウント名/サーバー名/errors/error.log');

167デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/23(月) 15:07:39.91ID:jrWtf7ql0
>>16
ありがとうございます

/homeからのパスを設定しないといけなかったんですね…
php.ini に設定すればログがふえるようになりました
本当に感謝です

168デフォルトの名無しさん (ワッチョイ 8aeb-Mp6C)2018/04/23(月) 15:08:09.54ID:jrWtf7ql0
アンカ >>166 さんでした

169デフォルトの名無しさん (ワッチョイ 93ad-c97c)2018/04/26(木) 02:51:42.22ID:4mqP60uz0
c言語から勉強初めてjava→html/css→javascript→php→mysql→jqueryときてwordpressの本読んだけど
ウェブやるならこれだけでいい気がして今までの時間が凄く無駄に思えてきた・・・
phpとかできたほうが有利な点を教えてください・・・
モチベーションが・・・

170デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/26(木) 11:41:18.07ID:vpKHU58Q0
何かウェブサービスをやりたいとか
スマホでゲームとか作ってユーザのデータを集約させるバックグラウンドが必要とかでなく
ただWebサイトを構築したいってだけなら別にWPでいいんじゃない?
モチベが欲しいならWPなしでサイト構築するためにPHP学ぶでもいいのでは?
PHPerは無駄が好きなのでJava脳で車輪の再発明嫌いな人はPHP向いてないかもね

171デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/27(金) 20:59:04.65ID:4+bpK0C+0
同じサーバー内で、自プログラムが置かれているディレクトリとは異なるディレクトリにある
ファイルを読み込みたいのですが、そのディレクトリはBASIC認証をかけています。
この場合、phpプログラムから認証を突破するための手続きはどうすればいいでしょうか?
IDとパスワードはもちろん分かっている状態です。

172デフォルトの名無しさん (ワッチョイ 2165-luqG)2018/04/27(金) 22:21:06.56ID:7/omQtan0
>>171
何か試してから聞いてる?

173デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/28(土) 00:04:33.20ID:g3LZUwEj0
httpでやる必要がないならbasic認証関係ないんで
ローカルのファイルのパスがちゃんと指定できてれば読める
もしhttp経由で読み込む必要があるのなら
http://php.net/manual/ja/function.file-get-contents.php
ここの例4のとこ参考にして
Authorizationヘッダをつけてリクエスト送ればいい
"Authorization: Basic {$token}\r\n"
$tokenはbase64_encode('id:password');

174デフォルトの名無しさん (ワッチョイ 2be8-HzgJ)2018/04/28(土) 02:34:18.68ID:PnxQ5sIY0
>>172-173
思い違いと動作確認でもミスがあり、何か処理が必要と思い込んでいました。
すっぱり整理してやり直しをし、無事動作することが確認できました。

どうもありがとうございました。

175デフォルトの名無しさん (ワッチョイ 89f7-c97c)2018/04/30(月) 08:30:19.19ID:HJ8JxjLj0
ここで聞いていいのかわからないんですが、フレームワークの利用に関する質問です
5年以上前に誰かが作ったWebサイトを運用していく必要があるのですが、フレームワークはEthnaを利用しています
当時サイトを作った人や、その後追加改修を行った人は、もういない状態です。

Ethnaの使用感としては5年以上前に開発が止まっていて、ドキュメントも未完成。
これに学習コストを払うのは嫌だなあというのが本音です。人不足で新しい人も入ってきているのですが、覚えてもらうのが申し訳ないレベルです。

ただ、フレームワークを変えて書き直すとなると、ほぼサイトをリニューアルすることになります。
そもそもフレームワーク関係なく、設計書もなく、中身がブラックボックス化しているサイトなので、リニューアルは何度か検討しています。
が、やはり時間がかかってしまうので、なおしたいことがあればその都度プログラムを読んで、修正しています。

なので、「現状のままであるリスク」を「リニューアルするコスト」がこえないと、なかなか上を説得することが難しいという状態です。
このWebサイトは、年数億円を売り上げており、何かの拍子に動かないというのは許されない状況です。


前提としてはここまでで、ここからが質問なのですが
5年以上前に作ったサイトの、5年以上前のフレームワークをそのまま扱っていくリスクというのは、どう見積もれば良いものでしょうか?
古いシステムをそのまま使い続けてる現場に入ったなら、どのように考えますか?
一応進言すれば、現状は変えられる可能性が高いのですが、判断に悩んでいます。

176デフォルトの名無しさん (ワッチョイ 2be4-iMQz)2018/04/30(月) 15:33:03.01ID:jgwIHR0D0
動かなくなったらまずいといいつつ、
よくわからないものをいじって、なんとなく動いてるってことだよね?
その現状に危機感を抱くべきでは?
個人がフォークしたEthnamという後継プロジェクトはあるみたいだけど、
5.4で動くなんてのをウリにしてるあたり、
オリジナルはサポート切れのPHPバージョンを使ってるのだろうけど、
それだけで十分置き換え理由になるのでは?

177デフォルトの名無しさん (ワッチョイ 2165-luqG)2018/04/30(月) 16:33:45.75ID:xsz5GBeT0
>>175
コスト面では定量してTCOで比較すればよい
リスク評価も定量して算入するならリスクを分類した上でリスク発生率と予想損失額の積で損失見積もりとする

178デフォルトの名無しさん (ワッチョイ 81eb-NYJU)2018/04/30(月) 17:17:04.35ID:jhlqCVp+0
サイトの仕様を解析して理解する所から始める。
仕様さえ分かれば、フレームワークなんて大したことないって気づきそう

179デフォルトの名無しさん (ワッチョイ 19e9-Zmkj)2018/04/30(月) 17:20:23.74ID:Fr6QpWrH0
よく知らないけど、5年以上前のフレームワークってセキュリティ的にどうなの

180デフォルトの名無しさん (ワッチョイ 2141-nMkC)2018/05/01(火) 05:57:16.67ID:YFbi6kAs0
使い道あるの?

181デフォルトの名無しさん (ワッチョイ 272b-XJxX)2018/05/04(金) 18:08:52.10ID:ZORKHZxp0
FastCGIで動かす時にアプリケーション初期化のコードは最初の1回だけ実行したい
というより予め実行済みの状態でリクエストを待機させたいんだけど、どうすればいいの?

182デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 02:10:31.22ID:i6PqpWH90
ファイルを file_get_contens() や file_pet_contents で読み書きしたいんですが
ロックってどうすればいいんでしょうか
flockにファイルディスクリプタが必要みたいなんですけど
それを使って与密会するわけじゃないのでRD_ONLYで開いてもいいんでしょうか

$fp = fopen($filename, 'r');
if (flock($fp, LOCK_EX)) {
file_get_contents($filename);

file_putt_contents($filename);
flock($fp, LOCK_UN)
}

でうごきますか?

ロックファイルはわける必要がありますか?
ロックがぶつかるケースをデバッグできないので大丈夫なのかどうかがよくわかりません

183デフォルトの名無しさん (ワッチョイ bfad-pRpi)2018/05/05(土) 02:45:58.52ID:r2NCQwWJ0
てす

184デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/05(土) 05:47:07.80ID:ai+BlqsN0
$fp = fopen($filename, 'c+');
if (flock($fp, LOCK_EX)) {
$buf = '';
while ($tmp = fread($fp, 1024)) {
$buf .= $tmp;
}
rewind($fp);
ftruncate($fp, 0);
fwrite($fp, $buf.$buf);
flock($fp, LOCK_UN)
}

185デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 15:07:11.64ID:XYMHadsA0
スマホ向けに下記をhtmlのheadに書いた場合は、スマホの横サイズいっぱいで折り返し表示されますが、
<meta name="viewport" content="width=device-width,initial-scale=1" />

php埋め込みhtml(拡張子はphp)に上記を書いても折り返してくれません。

他に何かお作法が必要でしょうか?

186デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/05(土) 17:46:10.93ID:ai+BlqsN0
文字コード周りに問題がなければ
PHPで出力したHTMLのソースを表示してみてオリジナルのHTMLと対比してみては?
エスケープミスでタグが閉じられてない状態で出力されてるとかそんなレベルかもしれない
サーバ側で関連ヘッダーを出力しちゃってる可能性もあるので
理解出来るならブラウザの開発者ツール使ってHTTPヘッダの中身チェックするといい

なんにせよ再現できる全体ソースが出ないことには答えようがない

187デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 18:17:23.60ID:XYMHadsA0
>>186
原因が分かりました。
変数に改行(\n)付きの長いメッセージを入れてあり、それを表示するのにpreタグ
で囲っていたのが原因でした。

preタグを使わずに改行付きの長いメッセージを表示する方法を考えてみたいと思います。

どうもありがとうございました。

188デフォルトの名無しさん (ワッチョイ 1fe9-bmQX)2018/05/05(土) 18:24:56.30ID:XYMHadsA0
連投すみません。
nl2brを使えばすぐでしたね。
初歩的なことですみませんでした。

189デフォルトの名無しさん (ワッチョイ 0beb-pRpi)2018/05/05(土) 21:35:48.44ID:i6PqpWH90
>>184
やっぱりロックとる場合はロックをとったファイルディスクリプタに
fread, fwriteで読み書きする必要があるんですね
コード参考にさせていただきます
ありがとうございました

190デフォルトの名無しさん (ワッチョイ 277f-U8nf)2018/05/06(日) 01:38:07.25ID:qVg6wQW80
プログラムの基本を教えてください。

一つのphpファイルが300行をオーバーしてしまったから、汎用性はないけど一まとまりの機能があって、色んな所から呼び出す処理を別のphpファイルにしてインクルードで呼び出す、
という形で小分けにしていこうと思ってますが、そんな風にバラバラにしてしまってもいいんでしょうか?

191デフォルトの名無しさん (ワッチョイ 1ee4-jSIs)2018/05/06(日) 06:09:15.48ID:P7v+SOn20
その考えの行きつく先にオブジェクト指向があるのでオブジェクト指向入門するといいかな
方向性としてはあってるのでとりあえずは思った通りにやってみては?
あと行数に関していえば1万行クラスのソースコードはざらなので(半分はコメントだったりするけど)
長い行数になったときのソースコードの管理の仕方をIDE使って覚えていくといいよ

192デフォルトの名無しさん (ワッチョイ 277f-U8nf)2018/05/06(日) 06:33:20.08ID:qVg6wQW80
>>191
返信ありがとうございます。1万行はぞっとします。とりあえずはこの方向性で行きたいと思います。

193デフォルトの名無しさん (ワッチョイ 2fe9-pRpi)2018/05/07(月) 18:56:32.81ID:VgAGErm20
>>189
ファイルロックについてはその通り
stream_get_contents()を使うと>>184よりはもう少しスッキリ書けるかと

194デフォルトの名無しさん (JP 0Hb6-a7mP)2018/05/08(火) 19:09:31.56ID:GHttMtN9H
関数の呼び出しがあっているのかわかりません

ボタンでCreateとLikesの処理をわけたいんですが、うまく実行できません

(ボタンの処理は別のPHPファイルに書いてます)

create_qaとUpdate_likes_whenbuttonClickは、単体であれば実行ができているのはわかっているのですが、振り分けるためのbutton_Click関数に入れた途端動かなくなります
returnで、振り分けそのものができていることは確認しました(IDを表示することができたので、問題がないかと思っています)
何か間違っていそうか分かる人教えて下さい



public function button_click(Request $request,$session_id){
if(isset($_POST["create"])){
$this->create_qa($request,$session_id);
}
else if(isset($_POST["likes"])){
//return $session_id; これはできてる
$this->update_likes_whenbuttonClick($request,$session_id);
}
}

エラーログは読んだの?
超能力者じゃない限りソースだけ貼られても分からんよ

196デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:06:53.22ID:XEaTgBIDp
>>195

errorが全くでなくて、むしろ真っ白なページが表示されます・・・
関数単体だときちんとreturn viewしたページに飛んで、処理もできているのに、こっちだとできないです

197デフォルトの名無しさん (ワッチョイ 27ff-NrvC)2018/05/08(火) 21:11:07.16ID:r4cHd3Kx0
>>194
elseまで流れてるとか

198デフォルトの名無しさん (ササクッテロラ Sp23-a7mP)2018/05/08(火) 21:22:37.44ID:XEaTgBIDp
>>197
return でelse以降に入ると数値が表示させるようにして確認しましたが、今のところ流れてはなさそうです
分岐を一切作らずに
$this->create_qa($request,$session_id);
だけ入れてもおかしなことになるので、
$this->〜〜〜っていう表記が間違っているような気がするのですが何がおかしいのか全く分からず・・・

199デフォルトの名無しさん (ワッチョイ 27ff-NrvC)2018/05/08(火) 21:33:50.33ID:r4cHd3Kx0
>>198
簡単な別のメソッドを作って呼び出せるか試してみたら

200デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 21:46:05.47ID:ZabFV5ph0
>>199

引数なし、return0をするだけの別の関数を作って、同じように呼び出しをしてみましたがだめでした、
やっぱりthis〜の行が何かしら影響を及ぼしてるようです・・・

201デフォルトの名無しさん (ワッチョイ bb65-y/Bc)2018/05/08(火) 22:12:48.09ID:Wxx1HImu0
error_logでファイルにエラー吐いてないのか?
画面出力はエラー出力でHTTPヘッダとか壊れてまともにならんことも多いぞ

202デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:27:49.92ID:ZabFV5ph0
>>201
ためしにエラー出力してみましたが、全く何もでてないようで・・・

203デフォルトの名無しさん (ワッチョイ 46d2-a7mP)2018/05/08(火) 22:40:25.33ID:ZabFV5ph0
>>194
ですが解決しました!
分岐文の内部でreturn viewができてないのが原因でした
すみませんお騒がせしました

204デフォルトの名無しさん (ワッチョイ 6bb3-G8ur)2018/05/09(水) 00:23:01.03ID:SCT1xJRf0
変数の$〜〜の$ってなんて読むの??
ドルなんとかって読んでるんだけど間違い?

205デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 06:54:52.26ID:U06fQouG0
文字列全体を正規表現判定するのってどうすればいいんですか?

入力に不正文字がないかチェックしたいんですけど

pregmatch('/[0-9a-zA-Z]+/', $input)

だと一部にマッチしてもtrueになっちゃうので
文字列全体で数字アルファベットしか使われてないことを確認したいです

206デフォルトの名無しさん (ワッチョイ cbb8-mmKM)2018/05/16(水) 07:46:14.68ID:kggTFXx50
^[0-9a-zA-Z]+$
そういう単純なものは正規表現使うまでもなく
他の関数が用意されてると思ったほうがいい
http://php.net/manual/ja/ref.ctype.php

207デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 07:53:08.47ID:U06fQouG0
ctype_alnumを使えばいいんですね
ありがとうございました!

208デフォルトの名無しさん (ワッチョイ c5eb-bFqk)2018/05/16(水) 08:02:56.78ID:U06fQouG0
あとPHPの配列についてききたいんですけど

a[] = 2;
a[] = 4;

や array(2,4) でつくった場合Cやjavaの配列と同じくメモリ上にvalueだけがならんで
a[1] でアクセスした場合アドレス計算でアクセスされるんでしょうか?

それとも自動的に連想配列になって '1' っていう key を検索するんでしょうか?

メモリにははいるけどキャッシュにははいらないそこそこ大きなテーブルデータを扱ってるので気になりました

新着レスの表示
レスを投稿する