【PHP】下らねぇ質問はここに書き込みやがれ 10

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ cfe8-+65u)
垢版 |
2018/11/28(水) 17:08:46.02ID:Nb5yTkdM0
PHPに関する質問スレです

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

次スレは>>980以降
本文の1行目に以下を追加すること
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2020/02/23(日) 19:13:36.62ID:xNzf67+4a
正規表現なら一行で書けるのにごちゃごちゃ関数かます方が意味分からない
2020/02/23(日) 19:21:02.12ID:S7JwB5qb0
あの呪文のような記述を受け付けない人もいるみたいだ
俺は好きなんだけどな
2020/02/23(日) 19:29:10.11ID:EUelPM9rM
>>814
一行で書いてみ
もちろん810がやろうとしてるザルなのはだめな
2020/02/23(日) 19:52:51.22ID:xNzf67+4a
新手の教えて君か?
その手には乗らねーよ
2020/02/23(日) 20:18:07.28ID:EUelPM9rM
ま、こんなもんだろ
口先だけで自信ないから書けない
正規表現なんて書けた気でいるやつが大半でバグの温床
本当にちゃんと書けるやつだけ使えな
2020/02/23(日) 20:46:46.39ID:xNzf67+4a
頭がバグってるやつに言われてもね
2020/02/23(日) 21:13:29.11ID:0sUq9sLC0
>>818
自分が有能と勘違いしてるプログラマにありがちだな
教えて→こんなこともわからないの?底辺!→はよ教えて→考える力が身につかないよ!自分でやれ!→はよ教えて→無言で逃走
2020/02/23(日) 21:37:24.28ID:rIVuphj20
先輩が書いたコードを見ると $_SERVER などの取得する値に対して
urldecode やら isset やらで本当にその値か正しいものかどうか、セットされてるかどうか
毎度調べてるようなのですが、正しくない場合の事例が書いてあるサイトってありますか?

また、この手のエスケープや存在確認やらがまとめてあるサイトもあれば教えていただけますでしょうか。
自分では追っかけきれず、毎度先輩に迷惑掛けてしまっている状態で申し訳ないっす…
2020/02/23(日) 22:27:34.54ID:jUm6GNGX0
横からワロス

>>817
なんでわざわざ二レス三行も書いて、一行で書けるものを書かないのか
2020/02/24(月) 11:46:26.32ID:/D+Ss1rU0
>>821
$_SERVERで取れるのは環境変数
環境変数って言うぐらいだから、その値が必ずある保証なんてないし、めちゃくちゃな値をセットする事もできる

例えば
$_SERVER['HTTP_USER_AGENT']
とかな。自分でめちゃくちゃな値をセットして自分で実験してみたらいい

isset()なんか使わんけどねw
あるか無いか分からない時は getenv() 使えばいい

urldecode()にいたっては検証用の関数ですらない
URLエンコードされたデータをデコードしてるだけ

なんていうかHTTPの基礎から理解できてない
とりあえずGoogle Chromeのデベロッパツールでも眺めてHTTPの流れから理解した方がいいんじゃね?
2020/02/24(月) 11:58:40.79ID:/D+Ss1rU0
>>818
ペチパーはクソ正規表現をネットに載せるな!って昔からよく馬鹿にされるからなぁ…

まずは>>813のようにHTMLをパースする別の手段を検討すべき
その上であえて正規表現を選ぶってのなら別にいいけどさ
2020/02/24(月) 12:00:32.05ID:/D+Ss1rU0
>>810
くそ適当に書くけど

$html = '<a href="http://img.hoge/001.jpg"; target="_blank">';

preg_match_all('/href\s*=\s*([\'"])(.+?\.(?:jpe?g|png))\\1/i', $html, $match, PREG_SET_ORDER);
print_r($match);

・大文字小文字の考慮
・スペース文字の考慮
・シングルクォートで挟むのかダブルクォートで挟むのかの考慮

正規表現を使うならせめてこれぐらいはしようよw
2020/02/24(月) 12:08:32.46ID:/D+Ss1rU0
自分で書いた>>825のクソコードを眺めて思ったがほんと>>818の言う通りだな
一字一句同意する

きちんと処理したいならHTMLパーサーを使ってきちんとパースしなされ
827デフォルトの名無しさん (ワッチョイ 8f89-sS5o)
垢版 |
2020/02/24(月) 12:27:06.58ID:bCyGnyrg0
>>810です。
皆様ありがとうございます。
勉強不足であると実感しました。
URL取得はうまくいきました。
2020/02/24(月) 18:10:06.13ID:rxpR87T30
>>821
毎度?普通はそういう繰り返し使われる処理はライブラリ化すると思うけど
2020/02/24(月) 18:12:00.24ID:rxpR87T30
正規表現なら1行で書けるといいながらその1行すら書けずに逃げた>>814が恥ずかしすぎる
2020/02/24(月) 18:27:40.24ID:pG7e8gTP0
>>823
ありがとうございます。
色々値セットして試してみます。

ちなみにデベロッパーツールの何処をみたらHTTPの流れを知ることができるのでしょうか?
2020/02/24(月) 19:35:47.79ID:/D+Ss1rU0
>>830
上のタブでNetworkを選んでHeadersのところを見る

Request Headersに書かれてるのが、ウェブサーバに対するHTTPリクエストの内容

例えばそこにAccept-Encoding: gzip とあれば
ウェブサーバがそれを見てコンテンツをgzip圧縮してレスポンスとして返す
そしてウェブブラウザがそれをデコードして元に戻す

User-Agentなんかも書かれてるはず


Accept-EncodingにせよUser-Agentにせよあくまでも自称であり、
そこには嘘でもめちゃくちゃな文字列でもなんでも書けるんだよ
だから値を信用したら駄目ってこと
2020/02/24(月) 19:42:59.09ID:/D+Ss1rU0
>>830
自分でHTTPクライアントを作ってみるのが一番いい
fsockopen()やstream_socket_client()あたりでサーバに接続して
HTTPの命令を送ってレスポンスを受け取るみたいなコードを書けばHTTPの流れは一発で理解できる

「PHP stream_socket_client HTTP/1.1」とか適当にググったら、たぶんサンプルコードは見つかるはず
2020/02/24(月) 20:05:32.49ID:ZFXUbFog0
漏れは、5ch の投稿から、画像のリンクだけを取り出すために、
Ruby で、こういうモジュールを作っている

module MyUtility
require 'uri'

@@EXTS = %w(png jpg jpeg gif) # 画像の拡張子

# 画像の拡張子かどうか?
def check_picture_extname? ( picture_url )
return false if picture_url.empty?

begin
uri = URI.parse picture_url
rescue # 半角以外の文字
return false
end

file_name = File.basename(uri.path) # ファイル名
file_extname = File.extname(file_name) # 拡張子
return false if file_extname.empty?

# . を削除して、小文字にする
file_extname.delete!(".").downcase!

@@EXTS.include? file_extname # 含まれている?
end

module_function :check_picture_extname? # 公開
end
2020/02/24(月) 20:10:17.32ID:pG7e8gTP0
>>831-832
超詳しくありがとうございます!
ググる用語まで教えていただき感謝です。

Headers はじめて開きました。
ここの情報を引っ張ってきてるんですね。
色々調べてみます。
2020/02/24(月) 20:20:22.27ID:ZFXUbFog0
VSCode の拡張機能の、REST Client を使えばよい

### で区切れば、いくつでも書ける。
カーソルを置いて、右クリックメニューから送信

GET http://localhost:8888/?page=2&;pageSize=10 HTTP/1.1

###

POST http://localhost:8888/ HTTP/1.1
content-type: application/json

{
"name": "sample",
"time": "Wed, 21 Oct 2015 18:27:50 GMT"
}

###
2020/03/04(水) 00:36:08.76ID:4nMHG/7W0
phpファイルにパスワードを記入しているのですが
安全でしょうか?
もしくはもっと安全な方法はありますか?
2020/03/04(水) 01:50:10.45ID:9gBPL9dd0
安全かどうかと聞かれれば、安全ではないと答えるが
838デフォルトの名無しさん (ワッチョイ 4f89-x1Qw)
垢版 |
2020/03/07(土) 21:24:50.43ID:0OcB8lvE0
質問です。
テキストファイルにキーワードが書いてあり、
それを読み込んで一致する文字列があったらtrueを返します。
しかし、たまに一致箇所があるにも関わらずスルーされる場合があります。
なぜでしょうか?
判定は↓のような感じです。
strpos($str,'キーワード') !== false
839デフォルトの名無しさん (ワッチョイ 9fad-j73r)
垢版 |
2020/03/07(土) 22:30:19.72ID:olnFzWkU0
>>838
再現性のある最小コードをどうぞ
$strとキーワードじゃエスパーじゃないと分からん
2020/03/07(土) 22:38:56.40ID:1MRzagVb0
改行が混ざってるんじゃない?
841デフォルトの名無しさん (ワッチョイ 4f89-x1Qw)
垢版 |
2020/03/07(土) 23:48:46.74ID:0OcB8lvE0
すみません。
解決しました。
原因は、テスト用のフォルダのパスのままになっていたことと
試運転時のデータが一部使われていた事により
一部検出されていないというおかしな状態になっているということでした。
2020/03/08(日) 01:24:36.29ID:yy8ndPXN0
原子力発電所じゃなくてよかったw
843デフォルトの名無しさん (ワッチョイ 4bda-R/kF)
垢版 |
2020/03/08(日) 16:38:04.82ID:o6nDRKvt0
die();
exit();
exit は言語構造です。 status を指定しない場合は括弧なしでコールできます。

って今知ったわー
2020/03/13(金) 02:12:30.03ID:iVXMMcFW0
foreach ($this->_db->query($sql) as $v) {...}

query()やprepare()で準備した文はexecute()必須だと思ってましたが
↑の記述ではexecute()なしでSQL文を実行できているようでした
何故でしょうか?
2020/03/13(金) 02:27:00.67ID:6hF2k6+W0
$sqlの内容が 直接実行可能なSQL文だったらそのままで行けるよ
846デフォルトの名無しさん (ワッチョイ 69f1-ZSAD)
垢版 |
2020/03/13(金) 13:42:16.08ID:3oUhS72l0
->
=>

がよく混同する。
どれがどの用法かを一発で覚える方法ある?
数ヵ月以上使っていなかったり他言語やってたりすると覚えるのは困難。
2020/03/14(土) 09:55:43.61ID:Vu/3uGwv0
>>845
どうも
$sql のSQL文は下記なのですが、直接実行できるときとできない場合の
見分け方ってありますでしょうか?
$sql = "select answer, count(id) as c from answers group by answer";

bindValue() とかをかましているときに execute() 使っているようなので
プレースホルダの置換しなければおk的な感じなのでしょうか?
2020/03/14(土) 11:47:05.77ID:Vu/3uGwv0
>>847
自己解決しました。
prepare() と execute() がセットで query() は単体でおkのようでした。
849デフォルトの名無しさん (ブーイモ MM8d-ZSAD)
垢版 |
2020/03/14(土) 12:06:04.05ID:ftz/XzuIM
>>846
いまだ自己解決しません
850デフォルトの名無しさん (ワッチョイ 068c-WOeG)
垢版 |
2020/03/14(土) 19:01:35.17ID:B3THKCTN0
>>846
->これはアロー演算子だから
オブジェクトとかクラスとか呼び出したときにメソッドを呼び出すときに使うから
クラス名->メソッドとかで
=>これは普通の演算子以下とか以上とかで使うやつだから
2020/03/14(土) 19:46:32.71ID:DYwfTyBB0
>>=>これは普通の演算子以下とか以上とかで使うやつだから

嘘つき
852デフォルトの名無しさん (ブーイモ MM8d-ZSAD)
垢版 |
2020/03/14(土) 19:58:46.89ID:hEp1GdU0M
>>850
このウソつきめ
853デフォルトの名無しさん (ワッチョイ 7d02-FfQu)
垢版 |
2020/03/14(土) 20:34:45.23ID:GFwOalat0
>>850
You are a liar!
854デフォルトの名無しさん (ワッチョイ 068c-WOeG)
垢版 |
2020/03/15(日) 12:42:37.91ID:dxrxQoIU0
>>850
間違ってたわ、=>これは配列で添字で関係持たせるときに使うやつだったわ
謝罪しておきます
2020/03/15(日) 19:54:07.87ID:NaNFV4Bh0
最近はfnとセットでアロー関数使うときにも使うけどね
856デフォルトの名無しさん (ワッチョイ 69d2-WWFo)
垢版 |
2020/03/16(月) 05:40:39.73ID:3OE3knP80
>>846
-> は「の」
=> は「は」
857デフォルトの名無しさん (ワッチョイ 69f1-5Ayy)
垢版 |
2020/03/16(月) 10:12:02.17ID:n/UZHZ/90
>>856
その説明ではわかりません。

まず
・象は鼻は長い
・象の鼻は長い
の違いを教えてください
2020/03/16(月) 10:41:57.59ID:88XG2BvL0
なんでこうプログラマとかUNIX使いってめんどくさいのが多いかね
2020/03/16(月) 14:37:23.52ID:UdSTQWc50
先にめんどくさいことを片付けるか、後からめんどくさいことにぶち当たるかの、違い
860デフォルトの名無しさん (ワッチョイ 1389-xsY/)
垢版 |
2020/03/22(日) 17:15:31.58ID:R2yf6A3f0
質問いいでしょうか?
ローカル環境XAMPPで動かしています。
外付けHDDから画像を表示させようとしたところ見つからないというエラーが出ました。
[an error occurred while processing this directive] 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 [an error occurred while processing this directive]

リンクをコピーで確認したところURLの前に「http://localhost」が勝手に追加されていました。
これのせいで上手く表示されていないようです。
なんとかして画像を表示させる方法はないでしょうか?
2020/03/22(日) 17:37:50.11ID:95kANOoTr
>>860
諸々の知識が足りて無さすぎるのでサーバーとはなんぞやxamppとはなんぞやってとこから勉強してどうぞ
2020/03/22(日) 17:38:33.08ID:StD3gLg7r
urlとファイルのパスは違う
ただそれだけ
863デフォルトの名無しさん (ワッチョイ 1389-xsY/)
垢版 |
2020/03/22(日) 18:26:04.76ID:R2yf6A3f0
ウ〜ンやっぱ無理か
一時的にコピーくらいしか思いつかんな
データとして貼り付けるにして多いし重すぎる
2020/03/22(日) 19:21:51.54ID:uAP5d0yV0
ドキュメントルート内のどこかからジャンクションやシンボリックリンク張るなり、サーバー設定でaliasすればいいんでね?
2020/03/22(日) 19:38:15.03ID:sN305W7E0
>>863
フルパスで指定している?
ドライブ名が入っている?
866デフォルトの名無しさん (ワッチョイ 1389-xsY/)
垢版 |
2020/03/22(日) 22:18:36.23ID:R2yf6A3f0
>>865
フルパスでやってる
ドライブ跨ぐと駄目なんだろうな
2020/03/22(日) 22:40:26.52ID:sN305W7E0
>>866
https://webnetamemo.com/server/201509181768

ここの、「VirtualHostを追加」を参考にしてみて
2020/03/22(日) 22:54:04.30ID:D4yHaglA0
相乗りで質問させてください。

>>867 のリンク先に書いてあるような設定を済ませて、chromeでは〇〇〇.localhostといった
URLで開けるようになったのですが、それ以外のブラウザではエラーが出てしまい開けません。
改善方法はありますでしょうか?

PHPと関係ないかもしれませんが、該当スレも見当たらず…
どうかご回答よろしくお願いいたします。
2020/03/22(日) 23:06:53.02ID:UY6UlDJY0
マルチな上に回答付いてる
https://mao.5ch.net/test/read.cgi/mysv/1529369008/296-298
2020/03/22(日) 23:51:04.35ID:z2MML3bn0
virtualhostでもいいけどめんどいしalias追加でいいんじゃねえの
2020/03/23(月) 07:16:27.59ID:jGS2rL5b0
Windows 10, WSL, Ubuntu 18.04 で、Ruby なら、Linux 側で、
1-liner で、Rubyで作られた遅いウェブサーバー、WEBrick が起動する

ruby -run -e httpd . -p 8080

そのフォルダに、index.html があれば、
Windows側から、これでブラウザでアクセスできる

http://localhost:8080

Linux側も、C ドライブ内にあるからかな?

アクセスするサーバーが、どのドライブのどのフォルダ内を、
カレントディレクトリとして起動したか
2020/03/23(月) 21:22:44.81ID:w/tA8drNM
2ch風の掲示板を作ってます。
datファイルで一行に名前・メール・メッセージと管理用のIDやらを
記述するやり方で、レスアンカーやurlをループ処理の中で出力時に
aタグで囲む方法が思い付きません。

正規表現でメッセージから有無の判定はできましたが、そこから先で詰まってます。
ヒントをください。
2020/03/23(月) 21:47:23.30ID:QTEdjjlGM
>>872
その正規表現を貼ってごらんよ。
それ使えばできるはず。
2020/03/23(月) 22:01:36.98ID:4wQQ+VSn0
後方参照がわからんのだろうな
matchじゃなくてreplaceでおk
正規表現でマッチした()の中身を置き換えのとこで$n or \\nで参照できる
例えばこんなん
https://ideone.com/lJv04e
2020/03/24(火) 02:26:45.30ID:84LIBSDP0
>>874
ありがとうございます。
早速試してみます。
何かできそうな気がしてきました!
2020/03/25(水) 23:42:46.36ID:YJCiq0GG0
>>874
下記記述で行けました。
本当にありがとうございました(涙)
preg_replace('/&gt;&gt;([0-9]{1,3})/', '<a href="#$1">>>$1</a>', $message);

ちなみにセキュリティに対して理解が浅すぎるのですが、渡ってくる文字列に対して警戒していればおkで
置換でa要素を使ったり、HTMLエンティティ対象の文字列をそのまま書いても大丈夫なのでしょうか?
2020/03/26(木) 08:37:27.85ID:uQPl4pkP0
5chはテキストログで1レス1行が都合が良さそうなのと区切り文字が必要になるので
そのへんの改行(<br>)と区切り(<>)考慮するとエスケープ済みのほうが扱いやすい
ただ欠点としてはログサイズが肥大する
もちろん必要最小限のエスケープでもできるけどめんどくさいので完全再現じゃないが

ログ保存時
$message = preg_replace('/\r?\n/', '<br>', htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'));

出力時
$message = preg_replace(['/&gt;&gt;([0-9]{1,3})/', '%(https?://[^\s&]+)%'], ['<a href="#$1">&gt;&gt;$1</a>', '<a href="$1">$1</a>'], $message);

とかなんじゃないかなと
リンクつける仕様上一旦エスケープしたのを戻す箇所があるので
そこでXSSを成立させないよう注意してコーディングする必要がある
エスケープ済みの文字は&lt;や&quot;のように&がつくので
[^\s&]のとこのように&でぶったぎるのが簡単
ちなみにurlの複数パラメータでも使われる&の扱いは面倒なので適当だけど
>>835のように&でリンク切れてるの見る限り5chも適当なのでおkってことで
2020/03/26(木) 22:20:23.54ID:pJp2pNNg0
>>877
詳しくありがとうございます。
5chのログの内容は最初にチェックしてたはずなのに、すっかり忘れてました。
再度確認したところ、エスケープ処理済みな上にタグまで付いてました…

てっきり出力前にエスケープするのがPHPのルールだと思ってたのですが、
まさか事前にエスケープしておくとは…

出力時のpreg_replaceも配列にすれば一回で済むのですね…
レスアンカーとリンクで分けてました

>>835のリンクについては、専ブラで見てたので気づきませんでした。
直リン避けも考慮してhttps://まで見て、後は半角英数なら置換対象に
してしまおう!…って感じで雑に考えてました。
preg_replace('/(h?ttps?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/', '<a href="$1">$1</a>', $replaceMessage);

凄く参考になりました。
どうもです。
2020/03/29(日) 10:25:07.65ID:wUzzaaBN0
文字列と多次元配列の値に対して一括で処理できるメソッドで質問です。

下記メソッドで$hogeに多次元配列が渡ってきたと仮定しまして、
値が配列であれば再起処理でメソッドが再度呼び出されるそうです。

私の考えでは、再起処理で多次元配列の中の値が配列ではなかったときは、
Aの文字列の方に流れるのではと思っていたのですが、実際は@に流れるようです。

多次元配列の中の文字列にis_array()を掛けてもfalseなのですが、どういった理由で
@に流れるのでしょうか?

function test($hoge) {
 // 配列の場合
 if (is_array($hoge)) {
  foreach ($hoge as $key => $value) {
   // 再起処理
   if (is_array($value)) {
    test($value);
   }
   // @配列の中の値が配列でない場合
   else {
    ...
   }
  }
  return;
 }
 // A文字列の場合
 return;
}
2020/03/29(日) 12:47:17.78ID:XdbgZgVO0
@は再帰呼び出しで、Aは再帰の終了条件だね。
配列の中に配列があったときは@が呼ばれるようになってる。
再帰を一度じっくり勉強したほうがいいよ。誤字も含めて。
2020/03/29(日) 14:07:51.77ID:wUzzaaBN0
>>880
誤字失礼しました。

どうにも理解できなくて、再度質問しようと文字に起こしていたところ自己解決できました。
Aは文字列専用の終了条件で@は配列専用の終了条件だったようです。

再帰処理の際に値が文字列なのに、何で配列判定で true が出るのだろう?
というところが疑問だったのですが、
本来であれば配列の中の配列である [] で再帰処理されるところを、その中の値Bで
再帰処理されていると勘違いしておりました。

ご迷惑おかけしました。

$hoge = [
 'piyo1',
 'piyo2',
 [
  // B
  'piyo3'
 ]
];
2020/03/29(日) 15:05:54.62ID:r8VR5IyJ0
書き方としては終了条件を早期returnして終了するべき(そうじゃないとひどく読みにくい)

一般化するなら

function apply_recursively($target, callable $callback) {
if (!is_array($target)) {
return $callback($target);
}

return array_map(function ($target) use ($callback) { return apply_recursively($target, $callback); }, $target);
// return array_map(fn($target) => apply_recursively($target, $callback), $target); // -> for PHP >= 7.4.0
}
2020/03/29(日) 19:30:19.50ID:KCykJRwi0
>>879
foreach 直後の if は不要で無条件に test($value) を行い、
Aは else にして @ に書いてた処理を書き、
関数の引数は function hoge(&$value) で参照で受けとるようにし、
foreach も foreach($hoge as &$value) にする。
こうしないと動かなくない?
2020/03/29(日) 19:31:44.20ID:KCykJRwi0
>>883
ごめんまちがい
function のくだりは function test(&$hoge) ね。
2020/04/11(土) 19:45:53.72ID:9fxAF0s30
phpのechoを使ってルートフォルダからの絶対パスを指定して
ナビ部分のリンク変更をサイト全体に一括で行えるような書き方を教えてください

3年くらい前にやってたんですが
やり方がわからなくなってしまいました
2020/04/12(日) 01:01:57.54ID:9sN7iYc+0
>>885
echoにそんな機能ないし、何が聞きたいのか伝わらないと思う。

find(grep)+sedのような、ファイルの中身に特定の文字列があれば、
それを一括で書き換えるようなことをしたいわけでもなさそうだし、
何かナビ用のリンクのリストをincludeしてるなら、
そのリストの中身を書き換えろで終わる話だけど、そんな簡単な話でもなさそうだし。
2020/04/12(日) 07:18:43.42ID:xGytKmNW0
細かく言いますと
一時期Web製作会社でコーディング業務をしており
html/cssは扱えるのですがphpはヘッダー、ナビ、フッターなど共通部分をincludeフォルダで共通化できる程度しか扱えませんでした

そして自社のドメインのサブドメインでテスト環境を作り、そこでHPを作成して客先の本番サーバにアップロードという工程で納品、保守管理をしていました

その場合、リンク先を絶対パスで書けないので相対パスにする訳ですが
phpで常にルートフォルダを取得して書き出し、それに続けて下層のリンク先を明記するようにしていたんですが
そのやり方を忘れてしまったので教えて欲しいのです
2020/04/12(日) 08:39:06.07ID:3vwO7tAb0
それだけ具体的に説明できるんならググった方が早いぞw
2020/04/12(日) 11:56:55.73ID:+wetVu4e0
2ch風の掲示板を作っており、考え方についてアドバイスをいただきたいです。

ログファイルでレスを記録して、1レス1行で構成されています。
ajaxを用いて遷移なしでの投稿反映と、レスアンカーにホバーすると、該当のレスを引っ張ってくる
ようになっています。

このレスアンカーへのホバーを行うと、当たり前なのかもしれませんが、添付の画像のように
どんどん_ajax.phpのファイルへのアクセス?が増えていってしまい、投稿ならまだしも、
ホバーするだけでPOSTを行うなんて、無駄な処理をさせているのではないか?
と考え出しております。

ログファイルは数百kb程度なので、投稿内容の全てをJS側で配列で保持をしていく方が
無難だったりしますでしょうか?

ttps://f.easyuploader.app/eu-prd/upload/20200412115052_69364c5954346f304857.png
2020/04/12(日) 13:52:29.72ID:tx1YNXXn0
>>889
目的次第

少なくとも表示中のレス(=クライアントで保持してるレス)に対するアンカーへのホバーでサーバーにアクセスさせるのは無駄
2020/04/12(日) 14:07:51.14ID:+wetVu4e0
>>890
ありがとうございます。

やはり無駄でしたか。
おいおい100レスずつ表示とかする予定ですので、表示されているレスと
表示されていないレスとで分岐させてみます。
892デフォルトの名無しさん (ワッチョイ 6ff1-Xgk8)
垢版 |
2020/04/12(日) 14:43:40.33ID:1ZMEMPeI0
->
=>

この使い分けをよく忘れるのですが
覚えておくコツはありますかね?
メインでPHP言語以外をやってるのでたまにPHP書くときよく混乱します。
893デフォルトの名無しさん (ワッチョイ 6ff1-Xgk8)
垢版 |
2020/04/12(日) 14:46:43.20ID:1ZMEMPeI0
>>856
「の」はクラス「の」メンバー、
「は」は連想配列のkey「は」これですよ
という意味?

でもこれ以外で->や=>が出てくる場面なかった?
2020/04/12(日) 15:36:12.26ID:ATqenNPh0
>>891
一度取ってきたレスはキャッシュしておけばどうよ。
どのみt 1-1000 みたいのだっやらまとめて全部取ってくることになりそうだが。
2020/04/12(日) 16:48:22.18ID:+wetVu4e0
>>894
ども。
おっしゃる通りかもしれません。
投稿以外でサーバーに負荷掛けるより、クライアント側で処理した方が
良い気がしてきました。
1回投稿での文字数を制限してしまえばサイズも制御できそうですし。
2020/04/12(日) 22:01:27.62ID:JZPIrIOa0
Ruby なら、0〜1,000 までの配列を作っておいて、
読み込んだレス番号だけは、その文字列を設定していく

p posts = Array.new( 1001 )

出力
[ nil, nil, nil, 続く... ]
2020/04/13(月) 00:40:29.11ID:DZv8piin0
どうせなら ruby じゃなくて JS で例示してやれよ。
phpのスレでなんなんだけどさ。
2020/04/13(月) 00:57:20.05ID:uI4POseh0
何かスレ番が飛んでいるんだけど
2020/04/13(月) 10:11:39.65ID:Hsuo/bvd0
RubyならRubyならってよく布教しに来るけどいい加減場違い空気嫁

>>887
URLの話じゃないでしょ?
内部の話なら別に相対パスにしなくても絶対パスでも問題ないんだけど。
その絶対パスがわからんって話?
自スクリプトから見た自分の絶対パスは__FILE__定数でわかる。
サーバのドキュメントルートが知りたいなら$_SERVER['DOCUMENT_ROOT']
ただしこういう環境変数($_SERVERや$_ENV)はあんまり過信しないほうがいいね。
900デフォルトの名無しさん (ワッチョイ 77b0-dkLK)
垢版 |
2020/04/16(木) 13:03:40.61ID:emwZ0tr20
Eclipseで参考書通りに
print “¥n”入れてもコンソールで改行してくれないんだけどなんで?
901デフォルトの名無しさん (ワッチョイ 9fad-9n34)
垢版 |
2020/04/16(木) 17:50:16.15ID:mDx3pHSK0
>>900
OSとか実行コードくらい書けないのか
あと円マークがそのまま出てるようなら
正しくは「(日本語環境では円マークに見える』バックスラッシュだから」
を確認しろ
2020/04/16(木) 18:32:43.61ID:jzlLoXMF0
Eclipseとかprint ""とかいう表記を見ると
古いか一般のPHP書籍とかかけ離れたもののきがするわ
あんま参考にしないほうがいいかもしれんね
903デフォルトの名無しさん (ワッチョイ 77b0-dkLK)
垢版 |
2020/04/16(木) 22:40:26.71ID:emwZ0tr20
OSはMac
eclipseでphp7
<?php
print “hello”;
print “¥n”;
print “world”;
print “¥n”;
?>
Kindle Unlimitedの参考書によるとこれで
hello
world
と出力されるみたいなんだけど実行すると
hello¥nworld¥n
ってなる
2020/04/16(木) 22:55:55.17ID:Vn4RPyR40
そりゃなるだろな
2020/04/16(木) 23:11:06.27ID:tywb42E30
これを、Ruby で、実行してもエラーになる!
print “\n”;

基本的にプログラミングは、どの言語でも、半角英数字しか使えない。
全角文字のクォーテーション・全角空白なども使えない

\ も、日本語キーボードでは、バックスラッシュキーのこと!
\ という文字を使っちゃいけない!

これなら、Ruby でも改行される。
print "\n" ;
2020/04/16(木) 23:33:15.15ID:H8AaCGjg0
rubyさんはあちこちのスレに出張布教してるんですね

>>903
php print 改行
で検索くらい出来ない?
2020/04/17(金) 06:24:31.98ID:9clD5XXx0
半角で書くべきとこを全角で書いてるのは
動いてるようだから書き込んだときのミスとして
文字コードがおかしいんだろう
文字コード変えるか\nやめてPHP_EOLにしとけば
2020/04/17(金) 10:18:56.55ID:OO65ehhVM
バチスカってmacの専ブラで書き込むとクウォートが全角に、バックスラッシュが円マークに、自動変換される
2020/04/19(日) 11:58:51.62ID:KKQsn4ZP0
サーバー内で動くプログラミングは可能のことですか?
例えば無限ループで常に動かすプログラムとか
2020/04/19(日) 12:58:45.29ID:dTXGqJa40
可能なことアルヨ
911デフォルトの名無しさん (ワッチョイ 1701-QEis)
垢版 |
2020/04/19(日) 14:20:56.44ID:26zoB4wU0
可能アルヨ
2020/04/19(日) 16:17:57.28ID:8HZGCfxQ0
普通はそんな事しないな
913デフォルトの名無しさん (ワッチョイ 1701-QEis)
垢版 |
2020/04/19(日) 23:14:11.96ID:26zoB4wU0
定期実行されるクローラーとかのこと言ってるんじゃないの?
レス数が900を超えています。1000を超えると表示できなくなるよ。