21/06/27 08:26:06.44 FX7uqy6OM.net
>>348
LaravelとかCodeIgnitor使ってるの?
356:デフォルトの名無しさん
21/06/27 10:26:55.16 ItQV7X9X0.net
feedを取ってくる場合、simplexmlとcurlのどちらがいいのでしょうか?
複数サイトになります。
357:デフォルトの名無しさん
21/06/27 11:50:32.87 r75U+hPN0.net
>>350
スレリンク(tech板:956番)
358:デフォルトの名無しさん
21/06/27 12:25:12.65 pjTb3Z/m0.net
>>348
html中に変数を埋め込む時は{}を使いましょうという基本的なことをやらないと
つうか最近エラー内容かかないの流行ってんか
359:デフォルトの名無しさん
21/06/27 12:46:28.79 ItQV7X9X0.net
>>351
curlは使わないのでしょうか?
複数サイトの場合はcurlのほうがいいと聞いたのです。
360:デフォルトの名無しさん
21/06/27 13:19:37.68 r75U+hPN0.net
>>353
curl使った所でどうせsimplexml_load_stringに食わせるんでしょ?
だったら最初からsimplexml_load_fileでいいじゃない
361:デフォルトの名無しさん
21/06/27 13:32:19.99 eeXftvTT0.net
複数サイトの場合はcurlがいいってのはcurlを子プロセスとして複数同時に動かせるからってことじゃないの?
いずれにしても、curlがやってくれるのはhtmlを取ってきてくれるまで、よ?
362:デフォルトの名無しさん
21/06/27 13:59:51.79 tkVDl+qA0.net
例えば、Ruby でも、普通に書くと、
open-uri モジュールのopen でファイルを取得する
require 'open-uri'
require 'nokogiri'
url = "URLリンク(example.com)
doc = Nokogiri::HTML( open( url ) )
elements = doc.css( "h1" )
puts elements.first.content #=> Example Domain
これを、外部コマンドのcurl に書き換える事もできるが、
外部コマンド(プロセス)を呼ぶ必要がない
html = `curl URLリンク(example.com)
doc = Nokogiri::HTML( html )
外部コマンドは、OS に左右される
特に、Windows では、curl.exe なのか、
PowerShell のcurl(curlモドキ)なのか、
アプリごとに微妙に挙動が異なるかも
(そもそもシステムに、Windowsを使うこと自体が間違いだけど。
すべての言語は、Linux用だから)
363:デフォルトの名無しさん
21/06/27 14:45:24.55 ItQV7X9X0.net
>>354
simplexmlだと複数対応出来ないと思ってました。
なしでやってみるです
>>355
並列処理云々と聞きました。
詳しくは分かりませんが、、、。
364:348
21/06/27 14:55:13.19 X9FVTu1L0.net
>>349
>>352
回答ありがとうございます
>>349
使ってないです
>>352
失礼しました 3ページ目で、$_POST['hoge']、という文字列が表示されてしまいます
{}をつけて、<(略) value="{$_POST['hoge']}"としてみましたがダメでした(上と同様に文字列が表示されてしまいます)
365:デフォルトの名無しさん
21/06/27 15:50:44.18 r75U+hPN0.net
>>358
value="<?php echo $_POST['hoge']; ?>"
366:348
21/06/27 16:08:52.70 X9FVTu1L0.net
>>359
$_POST[]はphpのタグで囲わないといけないんですね
ありがとうございました
367:デフォルトの名無しさん
21/06/27 17:11:37.21 Cz2fHMTfd.net
ローカルホストで練習中にphpmyadminでSQLにWHERE文をつけ忘れupdateして全データが更新されてしまいました。
本番でやったら恐ろしい事だと思うんですが、ロールバックのやり方等あったら教えてもらえませんか。
一応ターミナルでログインしてROLLBACK;はしましたが戻らなかったです。
368:デフォルトの名無しさん
21/06/27 17:45:47.61 tkVDl+qA0.net
バックアップを取っておけば?
snap shot とか
369:デフォルトの名無しさん
21/06/27 18:37:11.40 Hik46M4e0.net
>>361
オートコミットきっとけば
370:デフォルトの名無しさん
21/06/27 18:39:50.32 pjTb3Z/m0.net
>>360
いやいや…
>>352はhtmlをechoしてるのかと思ってそう答えたんだけど
$_POST関係なくPHPの変数をHTMLテンプレートに書く時はそうなるよ
ショートタグも調べてみるといい
371:デフォルトの名無しさん
21/06/27 18:46:38.38 pjTb3Z/m0.net
>>361
ロールバックはトランザクション開始してないとできないから
begin(トランザクション開始)してから書いて
updateしたらselectで確認したのちに問題があればrollback
問題がなければcommitする
つうかphp関係ないで…
372:360
21/06/27 19:07:30.25 X9FVTu1L0.net
>>364
分かりました
何となくそんな気はしてました
ありがとうございました
373:デフォルトの名無しさん
21/06/27 19:55:35.97 Cz2fHMTfd.net
>>362,363,365
色々アドバイスありがとうございます。
全部試してみますね。トランザクションやオートコミット、snap shot等知らなかったので勉強になりました。
374:デフォルトの名無しさん
21/06/28 08:58:02.88 GRcsjrE80.net
>>357
たしかに curl_multi_init() で初期化してからの一連の流れで複数の通信を非同期実行できるから、
それを「使いこなせば」、直列的に複数のサイトからデータ取得するよりは圧倒的に速くはなる
使いこなせば…ね
375:デフォルトの名無しさん
21/06/28 12:05:36.38 SRAdQ7Kv0.net
>>368
どうも
とりあえずsimplexmlでやるdeath
376:デフォルトの名無しさん
21/06/28 12:30:55.32 SRAdQ7Kv0.net
simplexmlloadfileで取得したxmlなんですが、見やすいように整形出来ないでしょうか?非常に見づらいです。
var_dumpを使用しています。
$url_arr = ["URLリンク(blog.livedoor.jp)
foreach($url_arr as $url){
$xml_elm = simplexml_load_file($url);
var_dump($xml_elm);
}
377:デフォルトの名無しさん
21/06/28 12:42:58.79 GRcsjrE80.net
>>370
var_dump($xml_elm);
までやってるのに自分で解決できないなら、それはもう「PHPの書き方自体がわかってない」って事じゃんw
とりあえず
$xml_elm を foreach() で回せ
foreachの対象は配列だけじゃない
378:デフォルトの名無しさん
21/06/28 12:53:32.28 SRAdQ7Kv0.net
>>371
$xml_elmをforで回すということは、自分でhtmlなりで整形しないとだめってことですかね
サクッと構造わかりやすく表示してくれればよかったんですが
379:デフォルトの名無しさん
21/06/28 12:55:48.26 flv9QEa50.net
ワロタw
380:デフォルトの名無しさん
21/06/28 13:32:04.00 GRcsjrE80.net
>>372
print_r($xml_elm);
そういえば前にも似た感じの質問してた人いたが同一人物?
もし同一人物なら諦めた方がいいぞ
スキップできない人が100M走のオリンピック選手目指してるレベル
381:デフォルトの名無しさん
21/06/28 13:42:08.81 quG4wdoj0.net
Ruby では、
p obj で、オブジェクトの中身を表示できる。
pp obj で、きれいに表示できる
PHP には、pretty print みたいな機能が無いの?
382:デフォルトの名無しさん
21/06/28 13:44:54.19 GRcsjrE80.net
お前ら>>2をよく読むように
383:デフォルトの名無しさん
21/06/28 16:18:41.46 SRAdQ7Kv0.net
>>374
print_rで見やすくはならないのですが
xmlの階層構造を知りたいのです
384:デフォルトの名無しさん
21/06/28 17:06:46.28 GRcsjrE80.net
>>377
URLリンク(paiza.io)
これ見ても分からないの?
1行で書けるけどw
385:デフォルトの名無しさん
21/06/29 12:43:13.08 QFJ3/yA+r.net
条件分岐して
$user_id = $comment->comment_author; (投稿に名前を入力された場合)
$user_id = empty($comment->user_id) ? "default" : $comment->user_id; (投稿に名前を入力せずにコメントが投稿された場合)
に分岐させる場合、
if foreach でどう構文を書けばよいのでしょうか?
386:デフォルトの名無しさん
21/06/29 14:13:26.09 jcOSDUmu0.net
>>379
// 最初にこうやってデフォルト値で初期化して
$user_id = 'default';
// こうすればいいだけでは?
if (!empty($comment->comment_author)) {
$user_id = $comment->comment_author;
} elseif (!empty($comment->user_id)) {
$user_id = $comment->user_id;
}
三項演算子は便利だけど、こういう質問をしている段階で無理して使わなくていい
この質問でなぜ foreach がいきなり出てくるのかは理解不能w
387:デフォルトの名無しさん
21/06/29 15:56:17.02 3ACgfFjZ0.net
名無しで投稿したいのに
ログイン済みだからってわざわざ身バレさせてあげるってことか?
鬼畜やな
388:デフォルトの名無しさん
21/06/29 16:14:27.35 QFJ3/yA+r.net
>>380
勉強になりました。ありがとうございます。
実装できました!
389:デフォルトの名無しさん
21/06/30 00:45:39.78 9XHMQjkRr.net
すみません調べてもわからなかったことがあるんですが、
$date = get_comment_date( 'Y/n/d', $comment->comment_ID);
<span class="my_author"><= $date ></span>
で日付けを取得してるんですが (Y/n/d)と出力したい場合どうすればいいんでしょうか?
日付けを()でくくる方法をネットで調べたんですがどうしてもわかりません...
390:デフォルトの名無しさん
21/06/30 01:04:12.91 iVkkZXbL0.net
そういうフォーマットが無いなら、
$date の前後に、文字列を連結して、( ) を付ければ?
それか、それを関数化して使うとか
391:デフォルトの名無しさん
21/06/30 01:08:32.08 +uONOblq0.net
$date = get_comment_date('(Y/n/d)', $comment->comment_ID);
でよいのでは?
392:デフォルトの名無しさん
21/06/30 06:56:15.60 gHjUFFSPM.net
日付扱うなら nesbot/carbon が楽だよ
393:デフォルトの名無しさん
21/06/30 15:33:44.49 E5lZLJuwr.net
>>384
>>385
大かっこ中かっこみたいに連結できるんですね、勉強になりました。
ありがとうございます。
394:デフォルトの名無しさん
21/07/01 16:07:46.68 /VJoNeIAp.net
VBで二限一次方程式のツール作るとしたら使う文法教えてくれ
395:デフォルトの名無しさん
21/07/01 17:07:12.29 rtzdpng60.net
>>388
ここに詳細な解説が載っているよ!
URLリンク(www.ruby-lang.org)
396:デフォルトの名無しさん
21/07/01 22:30:32.59 FtQP+R2v0.net
>>389
ありがとうございます!
きっとあの変人も喜んでいます!
397:デフォルトの名無しさん
21/07/02 05:15:42.19 8vqpw3og0.net
古いwordpressで徐々にレスポンシブ対応ページに変更しているのですが、
特定のurl(ドメイン/news/, ドメイン/blog/・・・など増加予定)の場合というifを作って
echoでレスポンシブのcssを出力したいです。
IPアドレスなどでレスポンシブ用cssを出すのはすでに実現しています。
$url = esc_url($_SERVER['REQUEST_URI']);
複数のURIの中からマッチさせたいです。
足していくので改行を使った配列を使うのが良いのか、strpos, strstrを使えば良いのか
どのような判定をすればいいでしょうか?
$responsive_url = array(
/news/,
/blog/
};
if(判定する関数($url, $responsive_url)){
echo "cssを出す処理";
}
みたいな感じになるのでしょうか
398:デフォルトの名無しさん
21/07/02 10:13:53.35 zJt0vXnM0.net
>>391
実際に書いてみればいいじゃん
PHPはスクリプト言語なんだから、悩んでる暇があったら書いた方が早い
URLリンク(paiza.io)
上記の例ではテストのために $uri の値を固定しているが
本番環境なら
$uri = getenv('REQUEST_URI');
を使えばいい
こういう実行環境をローカルに用意できてないなら、先にそっちを何とかした方がいいぞ
スクリプト言語のメリットが全く活かせてないから
399:デフォルトの名無しさん
21/07/02 14:20:08.79 8/5dBHDt0.net
>>391
urlからディレクトリ名抽出してその名前のファイル名.cssをCSSファイルとすればそこまで色々悩む必要は無い気がする
400:デフォルトの名無しさん
21/07/03 04:35:11.36 XWbbAf/z0.net
>>392-393
ありがとう、paizaというものがあるのね。
すごい便利でびっくり
そう、実はローカル環境が無くて、公開している本番サイトをちょっと触ったら白くなって慌てて戻してとかダメダメなやり方してる
ローカル環境作らないとダメよね。
URLリンク(paiza.io)
やってみたけど出来ていそうで上手くいかないorz
true, falseのところが間違っているのかな
フラグ用の変数を設けて、自宅用の固定IPか、レスポンシブ用のURIならcssを追記するってことなんだけど
無条件にcssが付加されてしまう
401:デフォルトの名無しさん
21/07/03 06:03:10.13 WJPssPjr0.net
オイオイ、最後trueを代入しちゃってるよ
402:デフォルトの名無しさん
21/07/03 07:16:32.91 +vCA0zbWM.net
メンテ担当に逃げられた無能っぽいな
403:デフォルトの名無しさん
21/07/04 21:04:35.74 wDVNm/sr0.net
入力項目の中で生年月日が入力されてなかったらdb側の生年月日にはnullを入れるシステムがどうしても作れなくてアイディアに詰まってるので助けてください
data型でdefault nullで作ってます
404:デフォルトの名無しさん
21/07/04 23:05:18.46 GsYUOVMj0.net
table create文をここに書いて
実際にデータをinsertするときの文も
>入力されてなかったら...nullを入れる
ここに落とし穴がありそう
405:デフォルトの名無しさん
21/07/05 01:27:32.49 fHx0Uh9Wd.net
めちゃくちゃ素人質問で申し訳ないんですけど入力された値が数値では無い場合と指定文字数じゃない場合にエラーを出したいんですけどどこが間違ってますでしょうか?
if(!is_numeric($_POST['te']) ||
!mb_strlen($_POST['te'])==8){
$err ='正しい数値を入力して下さい';
}
406:デフォルトの名無しさん
21/07/05 02:01:16.11 vro+Akhn0.net
>>399
$errはどこかでechoするんですよね?
407:デフォルトの名無しさん
21/07/05 02:16:11.46 gY5D6WDn0.net
>>399
is_numericとmb_strlenを一緒に使っているが、$_POSTに入力されるのは全角、半角どちらを期待しているのか?
半角ならばstrlen使うべきだし、全角ならis_numericではなくpreg_matchなどで処理する必要がある
解決方法としては、一旦$_POSTを変数に入れて全角か半角どちらか必要な方に統一した後、然るべき処理を行うのがよいと思われる
408:デフォルトの名無しさん
21/07/05 11:03:40.35 fHx0Uh9Wd.net
>>400
そうですね、その予定です!
>>401
ありがとうございます
1つずつ確認してみます
409:デフォルトの名無しさん
21/07/05 11:09:11.53 W/ubV+NK0.net
>>399
要件を整理すると「特定の範囲内の数値を正とする」ってことだと思うので、filter_input()使うのが楽だと思う
410:デフォルトの名無しさん
21/07/05 11:55:59.13 Fmkhs1Zc0.net
必要桁の数値による正規表現が簡単だぞ
411:デフォルトの名無しさん
21/07/05 12:18:25.72 kyq5FLmC0.net
>>394
strpos()で「~を含む」という処理を書きたいならこう書くこと
※理由はPHPマニュアルに書いてある筈
×:strpos($now_url, $res_url)
○:strpos($now_url, $res_url) !== false
極めつけはこれ
×:$match_responsive = true
○:$match_responsive ==== TRUE
$match_responsiveに true を入れてるのだから、結果は常に真になるぞ?
412:デフォルトの名無しさん
21/07/05 12:19:27.72 kyq5FLmC0.net
>>399
>>402
色々間違ってる
・$_POST['te'] が null(未定義) だった場合にそのコードはエラーになる(もしエラーにならないならエラー設定を見直すこと)
・半角数字の入力を期待しているのだから、使うのは mb_strlen() ではなく strlen()
・書くなら !mb_strlen($_POST['te']) == 8 ではなくて mb_strlen($_POST['te']) !== 8
・== ではなく === で問題なく動くコードを書くくせを付けた方がいい
・省略しただけかもしれないが、$err をきちんと初期化しよう
以上を修正したサンプル
URLリンク(paiza.io)
エラー設定のやり方
URLリンク(qiita.com)
413:デフォルトの名無しさん
21/07/05 12:20:57.53 kyq5FLmC0.net
>>405訂正
×:$match_responsive ==== TRUE
○:$match_responsive === true
414:デフォルトの名無しさん
21/07/06 14:16:58.59 K/Yz4VXdr.net
//ここにメイン部分のコードを記述 ループしないので <php if (have_posts()) : the_post(); >
<!--クラスつきのタイトルを追加-->
<h3><php the_title(); ></h3>
<!--クラスつきの日付けを追加-->
<div class="posted_date">
<php echo get_the_date(); ?> </div>
<!--リンククラス付きのカテゴリーを追加-->
<php
$categories = get_the_category();
if ( $categories ) {
echo '<ul>';
foreach ( $categories as $category ) {
echo '<li class="cat2"'.$category->slug.'"><a href="'.esc_url(get_category_link($category->term_id)).'">'.$category->name.'</a></li>';
}
echo '</ul>';
} ?>
<!--リンククラス付きのコメント数を追加-->
<php $num_comments = get_comments_number();
if ( $num_comments == 0 ) {
$comments = __('No Comments'); // 댓글이 없을 경우
} elseif ( $num_comments > 1 ) {
$comments = $num_comments . __(' Comments'); // 댓글이 2개 이상일 경우
} else {
$comments = __('1 Comment'); // 댓글이 1개일 경우
}
$write_comments = '<span class="singlecomments2"><a href="' . get_comments_link() .'">'. $comments.'</a></span>';
echo $write_comments;?>
<!--クラス付きの内容を追加-->
<div class="posted_content">
<php echo the_content(); > </div>
<php
endif;?> で出力してるんですが<!--クラス付きの内容を追加-->の部分のみ繰り返し出力する場合どうすればいいんでしょうか?
415:デフォルトの名無しさん
21/07/06 14:57:40.96 EJPu27Tj0.net
暇つぶしに過去作っていたプログラムを改修していたのですが、
関数ばかりのライブラリが、わりと使い勝って良くて軽量だったりします。
セキュリティを考慮すること無く、CRUD程度の操作なら
フレームワーク使わなくても良いと思ったりしたのですが、
みなさんはやっぱり自作の物は使わないようにしてますか?
416:デフォルトの名無しさん
21/07/07 01:26:08.59 bUHYGk470.net
Ruby のERB(埋め込みRuby)みたいに、
文字列をつなげて、HTML を作るのではなく、
逆に、HTML中に、Rubyの式を埋め込めば?
<%= ~ %> は出力される。
<% ~ %> は出力されない
<table border="1" cellpadding="4">
<% @items.each do |fruit, price| %>
<tr>
<th><%= fruit %></th>
<td><%= price %>円</td>
</tr>
<% end %>
</table>
417:デフォルトの名無しさん
21/07/07 01:32:32.70 7x6smrJ30.net
>>395,405
ありがとう、代入はダメね全然気付かなかった。
strposも位置を数字で返すのね。
あるあるなミスなようで俺もミスってしまった。
期待通りに動くようになりました。
418:デフォルトの名無しさん
21/07/07 14:02:49.29 Mv2t2pQw0.net
>>409
自分がずっとメンテするものなら使うし
そうではないなら、将来自分が面倒くさい事にならないようになるべく使わない
プログラマなんか楽してなんぼ
419:410
21/07/07 21:21:40.74 bUHYGk470.net
趣味・遊びなら、好きにすればよい
プロ・仕事なら、Ruby on Rails
420:デフォルトの名無しさん
21/07/08 08:53:13.93 Yr3Bg0Mz0.net
本当のプロならPHPのスレで他の言語を推したりしないw
本当のプロならRuby(笑)なんて採用しないw
421:デフォルトの名無しさん
21/07/08 19:06:14.53 yX5z+H5y0.net
相手にしなさんな
422:デフォルトの名無しさん
21/07/09 18:15:18.49 KkNlGqxZr.net
<php $args = array('posts_per_page' => 2,
'orderby' => 'date',);$posts_array = get_posts( $args );if (!empty($posts)):>
<php foreach($posts_array as $post):setup_postdata($posts_array);>
<a href="<php echo get_permalink();>"><div class="img-wrap">
画像
<php if ( has_post_thumbnail()){
//存在
the_post_thumbnail();}
else {
//存在しない
echo '<img src="noimage.jpg">';}></div>
タイトル
<h2><php the_title(); ></h2>
日付け
<php the_time('Y/m/d');>
カテゴリー
<php $categories = get_the_category();if ( $categories ) {echo '<ul>';
foreach ( $categories as $category ) {echo '<li class="cat1"'.$category->slug.'"><a href="'.esc_url(get_category_link($category->term_id)).'">'.$category->name.'</a></li>';}
echo '</ul>';}>
コメント数
<php $num_comments = get_comments_number();if ( $num_comments == 0 ) {$comments = __('No Comments');
} elseif ( $num_comments > 1 ) {$comments = $num_comments . __(' Comments'); } else {$comments = __('1 Comment');
$write_comments = '<span class="singlecomments"><a href="' . get_comments_link() .'">'. $comments.'</a></span>';echo $write_comments;>
コメントの抜粋
<php the_excerpt();>
記事を読む
<a href="<php the_permalink();>">記事を読む</a> <php endforeach;>
<php else:>
<div class="newarrival_nodata"><p>記事</p></div>
<php endif;wp_reset_postdata();>
ページナビを実装したいんですが、$nextpostと$prevpostを使って2ページ目を表示させる場合どういうコードを書けばよいのでしょうか?
423:デフォルトの名無しさん
21/07/09 18:28:51.80 Bz949MzB0.net
wordpressの話はwordpressスレへ
424:デフォルトの名無しさん
21/07/09 19:09:49.46 KkNlGqxZr.net
>>417
向こうで聞いても教えて貰えなくて…
425:デフォルトの名無しさん
21/07/09 19:23:26.52 aS/fIL1f0.net
>>418
ナビに関係ないコードばかりだし
ブロックに波括弧とコロンが混在してて見づらいし
$nextpostと$prevpostを使ってとか言いながら、$nextpostと$prevpostがそもそもコード内に存在しないし
質問の仕方が悪い
426:デフォルトの名無しさん
21/07/09 20:07:03.69 KkNlGqxZr.net
>>419
コードに付けたいんですが文字数制限があって書けないんです…
code penを見ていただけるなら書きますが…
427:デフォルトの名無しさん
21/07/09 20:18:24.64 KkNlGqxZr.net
URLリンク(codepen.io)
このコードを書くとエラーが出ます。どこが間違っているのでしょうか?
syntax error, unexpected end of file, expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF)
428:410
21/07/09 20:57:16.85 TIX9j1Dy0.net
>>410
に書いたみたいに、HTML 内に、PHP の構文を埋め込めば?
逆に、PHPで文字列をつなげて、HTMLを作ると分かりにくい
Ruby on Rails では、全部そう。
HTML内に、Rubyの式を埋め込む
<%= ~ %> は、HTMLに出力される。
<% ~ %> は出力されない
Rubyで文字列をつなげて、HTMLを作らない
なぜかと言うと、パーシャル・部分テンプレートにして、
その部分だけを別ファイル�
429:ノして切り出せないから それに文字列でつなげて、HTMLを作ると、 SQL インジェクションみたいに、 相手が情報を抜くような命令を入れてくるので、超危険! だから、Railsでは、a.html.erb みたいに、 ERB(埋め込みRuby)で書いて、それをHTMLにする
430:デフォルトの名無しさん
21/07/09 21:46:12.63 aS/fIL1f0.net
>>421
そもそも動かないコードとかさぁ
仮にナビができたとしても動かないじゃん
エラーの内容IFのタグの問題だよね
タグが合わないのはRSSの時に、タグ統一して不要な部分一旦コメントするなりして流れを追えって言われたよね?
何も進歩してないな、やれやれ…
431:デフォルトの名無しさん
21/07/09 22:34:16.27 SqCApkwQa.net
>>423
元のコードが動いていて、ページ要素を加えるために$next postを加えたときにエラーが起きました
タグを統一って具体的にどこでしょうか?
432:デフォルトの名無しさん
21/07/09 22:39:05.83 nNC4f6Lr0.net
文法エラーくらいは自分で見つけられないと
433:デフォルトの名無しさん
21/07/09 23:06:03.
434:20 ID:aS/fIL1f0.net
435:デフォルトの名無しさん
21/07/09 23:58:42.15 TIX9j1Dy0.net
Web制作管理板のWordPress のスレで、やってるみたい
5ch ではマルチポストは禁止だから、このスレでは話を続けない方がよい。
向こうのスレで議論してください!
1つのスレだけにしないと、答える人も同じ事を調べたりするので、無駄
436:デフォルトの名無しさん
21/07/10 02:46:38.45 gwvQHAgv0.net
Rubyバカが自分を棚にあげて何か言ってる
437:デフォルトの名無しさん
21/07/10 02:53:56.58 etRC44er0.net
>>5ch ではマルチポストは禁止
いつそんなこと決まったんだ?
438:デフォルトの名無しさん
21/07/10 06:01:14.33 BwwaALiC0.net
URLリンク(info.5ch.net)
439:デフォルトの名無しさん
21/07/10 08:21:25.24 l5rpHYDO0.net
>>430
それとはマルチポストの意味が違う
それに禁止されてるわけではない
440:デフォルトの名無しさん
21/07/10 10:30:31.94 BPX48WFJ0.net
同じ質問を至るところでして、回答者がいても返信すらしないというのはよくある事
書き捨てする様な質問には誰も答えないし、迷惑千万
441:デフォルトの名無しさん
21/07/10 12:57:51.58 B4xS3BY90.net
俺はヒールに徹するルビー君が結構好きだったんだけど
常識を語るようになったら終わりだね
442:デフォルトの名無しさん
21/07/10 13:45:53.05 npYW/9LsM.net
>>431
マルチポストの定義すら分からんのか
443:デフォルトの名無しさん
21/07/10 17:15:08.23 xuQr++Bu0.net
>>434
お前がな
444:デフォルトの名無しさん
21/07/10 23:37:27.16 L/F3nxmer.net
原因が少しわかりました
get_posts()は取得した投稿データを配列として返すのに対し、WP_Queryクラスを利用した場合は、データベース検索の条件やその結果がデータとして保持されるため、ループ内での条件分岐など、より高度なサブループの制御が可能です。
昨日書いたコードは$args = array()を2度分けて書いていたこと、
$posts_array = get_posts( $args );で投稿内容の取得をしているのに対し、
$the_query = new WP_Query( $args );でページナビの内容を取得しているので、
ひもずけされておらずページ番号と内容がマッチしておらず2ページ目をクリックしても内容のリロードができてませんでした。
一つ聞きたいのは、
WP_Queryとget_postsの違いは何でしょうか?
投稿内容をページナビ付きで表示する場合WP_Query() get_thumnailとかで投稿画像など取得できるのでしょうか?
445:デフォルトの名無しさん
21/07/11 02:17:32.48 lZiRxAj00.net
WordPress の質問ですか?
WordPressの事なら、Web制作管理板のWordPressのスレに書き込んでください!
5ch はマルチポスト禁止だから、
同じ質問を、複数のスレに書くのは禁止!
このスレではなく、WordPressのスレの方で聞く方がよい
446:デフォルトの名無しさん
21/07/12 01:09:59.12 cRbCoWRWr.net
URLリンク(teratail.com)
何とか作り上げることができました。
頭痛いのでねます。
447:デフォルトの名無しさん
21/07/12 16:45:41.95 ihSDWtOf0.net
Po@「
448:デフォルトの名無しさん
21/07/12 17:49:52.30 ZPBMd6Y/0.net
>>439
コラコラ
449:デフォルトの名無しさん
21/07/12 22:17:47.32 SYagZpGJd.net
アップロードされた画像をconstで定義されてるパス先に移動させたいんですが上手く出来ないので教えてください
move_uploaded_file($upload_file['tmp_name'],DIR_IMG.$new_file_name);
DIR_IMGには相対パスが入ってます('../img/など)
450:デフォルトの名無しさん
21/07/13 13:02:35.06 I15vJP3h0.net
そもそもアップロードされたファイルなのかどうか
is_uploaded_file()でチェック出来る
そうじゃないならrename()使え
その相対パスあってる?
realpath()で確認してみる
相対パスがあってたとして、パーミッションチェックした?
451:デフォルトの名無しさん
21/07/14 19:07:13.52 dWCeWde70.net
$fruits = array(
'banana' => 'yellow',
'apple' => 'red',
);
$coffee = 'cocacolla:geogia';
function morning($fruits,$coffee) {
$fruits['strawberry'] = 'red';
$coffee = 'suntory=boss';
return $fruits;
}
$fruits = morning($fruits,$coffee);
var_dump($morning);
echo '<br>'.$coffee;
?>
すいません。
phpでは、他の言語のように、関数外で定義された変数も
関数内では有効ではないのですね。。
で、関数外で定義された変数は、引数で受け取り、
returnで返すと、有効になることもわかりました。
=という認識であっていますか?
では、更新したい変数が2つあった場合どのようにすればいいでしょうか?
たとえば、上でいうところの$coffeeを更新したいのです。
452:デフォルトの名無しさん
21/07/14 19:09:54.91 dWCeWde70.net
訂正::すいません。
×var_dump($morning);
〇var_dump($fruits);
453:デフォルトの名無しさん
21/07/14 19:40:05.21 b60WN8TB0.net
グローバル変数なら別にスコープ関係無い筈だがそれ前提は設計的にどうかと思うので
以下の方法のどちらかを使う方が良いだろう
参照で渡す
function test(&$a) {
$aへの代入は関数で渡した変数に及ぶ
別にreturnする必要は無い
}
複数の結果をリターンする
function test2()
{
return [1,2];
}
list($a,$b) = test();
$aと$bに結果が入る
454:デフォルトの名無しさん
21/07/14 20:25:55.80 dWCeWde70.net
よくわかりました。
関数外に変数を定義したからといって、
global変数になるわけじゃないんですね。
ありがとございました。
参照渡しか、global変数の定義か、どちらかでやっていきます。
455:デフォルトの名無しさん
21/07/15 00:16:59.54 gFOIdhYR0.net
Ruby も珍しく、厳格な関数スコープ。
関数外の変数を、関数内で参照できない
引数渡しか、クラス・モジュール化して使うなどする
456:デフォルトの名無しさん
21/07/15 14:33:47.08 Hy5PN9MF0.net
>>446
まず「スコープ」という概念について勉強しよう
URLリンク(www.php.net)
それが理解できたら次は「グローバル空間」について
URLリンク(www.php.net)
それが理解できたら次は「名前空間」について
URLリンク(www.php.net)
今は野球のルールを知らないのに野球やってる状態
PHPマニュアルは優秀だから大抵の事は書いてある
最低限のルールは覚えよう
457:デフォルトの名無しさん
21/07/15 14:39:40.15 Hy5PN9MF0.net
>>441
その質問には超能力者しか答えられない
とりあえず、以下を参考にエラーを出力させよう
URLリンク(qiita.com)
次に、そのエラー内容をきちんと読もう
中学レベルの英語力で読めるので
そのエラーを読んでも意味が理解できないなら、エラー内容を転載して質問
俺らはエスパーじゃないw
458:デフォルトの名無しさん
21/07/15 20:53:46.77 jGrj3A7F0.net
>>443
なんとなく設計がよくない気がする
$fruits、$coffeeは、別々の関数で処理させて、returnはそれぞれ1つの方がよいと思う
無理にまとめると関数の独立性を損ねるし、それに参照渡しもlist関数も直感的でなく可読性が落ちる
459:デフォルトの名無しさん
21/07/17 05:15:45.31 YBqRFemK0.net
>>449
妙にしっくりきます。
長年ソフトボールに慣れ親しんで、
野球も似たようなもんだろ。って参加したら
両者の違いにやっと気づいて、苦悶する状態w
460:デフォルトの名無しさん
21/07/17 05:18:10.65 YBqRFemK0.net
>>449ではなくて>>448
すまそ。
461:デフォルトの名無しさん
21/07/17 18:21:09.31 ohkviaGsr.net
指定画像を出力したうえでメニューを作りたい
<php
header('Content-Type: image/jpg');
readfile('uploads/2021/07/7mgpH3K.jpg');
>
で画像の取得はできたのですが、
html文を続けて出力するとエラー
php文を続けても画像しか表示されません。
おそらく器しかなく受け皿のhtmlがないので画像ファイルとして認識されてしまっているのが原因だと思います。
<php
header('Content-Type: image/jpg');
readfile('wp-content/uploads/2021/07/7mgpH3K.jpg');
>
のあとに続けて画像 画像 メニュー 画像とへっだーナビ風に<table>にしたい場合どうすればよいでしょうか?
462:デフォルトの名無しさん
21/07/17 18:25:44.28 ohkviaGsr.net
画像が画面いっぱいに表示されるということは別のファイルに出力するということですかね、
複数表示してcssを付与するのはどうすればよいのでしょうか?
463:蟻人間
21/07/17 18:54:11.12 UtbSZ1Qtd.net
htmlの中にtable出力、その中でimg要素をsrc属性を付けて複数指定する。ブラウザはsrc属性付きのimgのイメージを自動的に読み込む。
464:デフォルトの名無しさん
21/07/17 20:16:21.59 ohkviaGsr.net
>>455
すみません、過去の質問を頼りに画像出力について検索したのですが、URLリンク(detail.chiebukuro.yahoo.co.jp)
PHPで画像データを読み込んで出力する場合は、IMGタグを
<IMG src="ooo.php?img=gazou.png">
PHPは
if($_GET['img']){
print file_get_contents($_GET['img']);
exit();
}
のようにします。
とありますが、<img src="img.php?img=uploads/2021/07/7mgpH3K.jpg">で
img.phpの中のuploads/2021/07/7mgpH3K.jpgを出力するとしても画像が出力できません。
何が原因でしょうか?
465:蟻人間
21/07/17 21:00:58.68 UtbSZ1Qtd.net
>>456
スラッシュをエスケープするにしてもその書き方は任意のパス名を受け入れるから危険だよ。
466:デフォルトの名無しさん
21/07/17 21:34:37.90 OaBiTcJcM.net
>>457
画像を呼び出す場合<img src="/header_image.php">のようにphpスクリプトを呼び出して、そのphpスクリプトが画像データを返すようにすべきです。
と言われたのですがほかに方法はあるのでしょうか?
467:デフォルトの名無しさん
21/07/17 21:38:04.55 xmQE+uIu0.net
<img src="img.php?img=uploads/2021/07/7mgpH3K.jpg">
じゃなくて、
<img src="uploads/2021/07/7mgpH3K.jpg">
じゃないの?
まあでも、ユーザーから送られたものを、チェック無しに、そのまま使うのは危険!
そこに、色々なファイルパス・命令などを入れてくる
468:蟻人間
21/07/17 22:23:28.15 UtbSZ1Qtd.net
パス名じゃなくてもっと制限された情報を渡す。
469:デフォルトの名無しさん
21/07/18 12:58:29.71 VnC3iq6Ar.net
>>459 >>460
ユーザーからおくられたものではなく自身のサイトのサーバーに置いた画像を指定して任意の場所に表示させ、メニューを作りたいんですがその場合
<img src="uploads/2021/07/7mgpH3K.jpg">でいいのでしょうか?
<table>にして画像 画像 メニュー メニュー 画像としたいんですが、phpを使わなければならないと勝手に認識してるんですが
470:デフォルトの名無しさん
21/07/18 13:23:08.70 A0aXocf00.net
HTMLでアクセス可能なPathなら、だが
ハッキングされそうで怖いな
471:デフォルトの名無しさん
21/07/18 14:04:59.57 fBmvBk7Y0.net
そもそもアップロード先フォルダだとしてそれをそのまま公開するのは頭がおかしい
PHP以前の問題
本来ならアップロードした時点でファイルを調べて、それでOKであれば
(例えばちゃんと画像ファイルなのかどうか等)
公開フォルダへコピーするなりするべきじゃね?
472:デフォルトの名無しさん
21/07/18 15:55:22.55 Th1fsKvf0.net
アホばっかりw
473:デフォルトの名無しさん
21/07/18 16:44:58.59 UQ3hWlPAa.net
セキュリティ的に危ないという理由を教えてください
一度サーバーのフォルダにアップしたものを公開するのは危ないのでしょうか?
474:デフォルトの名無しさん
21/07/18 17:23:13.71 ca/UjVuI0.net
>>465
セキュリティはちゃんと体系的な知識を身につけたほうが良いですよ
一応アップロード系の用語がそれなりに出てくる記事をリンクしておきます
URLリンク(qiita.com)
記事中の実装は、今となっては古すぎなので参考になりませんが、用語レベルでは網羅されているかと
入り口の記事として読んでください
外部からアクセスできる場所にアクセス・実行できるファイルを一個置かれただけで、かなりのことができるようになります
475:デフォルトの名無しさん
21/07/18 19:10:00.86 NSPuFPL00.net
RubyガイジとWPガイジはスルー推奨
476:デフォルトの名無しさん
21/07/18 19:37:42.84 gO2R7Orx0.net
>>453
header関数で画像データを指定してるんだからhtmlが出力されるわけない
何のためにわざわざheaderなんか指定してるのか不明
HTTPヘッダについて調べた方がいい
477:デフォルトの名無しさん
21/07/18 21:08:39.36 H/NN8O820.net
セキュリティーは、膨大な種類ある
だから皆、Ruby on Rails などのフレームワークを使う。
素の言語では、一生やっても作れない
Rails では、サーバーへプロフィール画像をアップロードする、機能がよく出てくる。
画像ファイルの縦横幅の制限、容量の制限、
中身にウイルスがうめこまれていないかチェックするなど、
色々なセキュリティー対策をしないといけない
さらにレスポンシブ対応で、様々なサイズに拡大縮小するなど、
OSS のモジュールを使わないと作れない
一々、自分で作っていては、一生掛かる。
Railsなどのフレームワークの勉強をしていない人は、絶対にシステムを作れない
他にも、マスアサインメント・SQL インジェクションとか、
セキュリティーには膨大な種類ある
だから、PHP のサイトばかり攻撃されるのは、
セキュリティーを知らない人が作っているから、情報を取りやすい
478:デフォルトの名無しさん
21/07/18 21:53:44.27 6mAUoTwKM.net
PHPのフレームワーク使うならLaravelだね
479:デフォルトの名無しさん
21/07/18 22:51:51.23 adePGcGm0.net
マルチポストには激おこするルビー君
480:デフォルトの名無しさん
21/07/18 23:11:24.32 g0bWf1Ea0.net
激おこなんていうJK用語をナチュラルに使いこなしているのがすごい
481:デフォルトの名無しさん
21/07/18 23:42:29.55 A0aXocf00.net
JK用語なの?
おじさん、普通に使ってた
482:デフォルトの名無しさん
21/07/20 01:13:58.90 kSAF0CCr0.net
アラフォーだけど、使うって感じじゃなくて…
ジェネレーションギャップかも
483:デフォルトの名無しさん
21/07/20 17:18:42.82 IgegoDKDM.net
以前質問させていただいた画像を直接上げてはいけない原因を調べたところ、
誰からもWebサーバを介してファイルにアクセスできないようにしておいて、ファイルの表示はプログラムを使ってアクセス制御をしながら表示する
つまり通常Webで画像を表示する場合、imgのsrc属性に画像が置いてあるURLを指定するというのが一般的だと思います。
しかし、画像を置いてあるURLを指定するというのは、画像を表示するためにはそのURLにアクセスできるということを表しています。
そこで画像をbase64化
画像をHTMLやCSSに埋め込める(直接記入出来る)ようにする為に、画像をbase64にエンコードします
<php $img = base64_encode(file_get_contents('画像URL')); ?>
<img src="data:image/png;base64,<php echo $img; ?>">
参考URL
URLリンク(www.tmp1024.com)
URLリンク(9-bb.com)
これで大丈夫でしょうか?画像は表示されました。
484:デフォルトの名無しさん
21/07/22 13:17:48.55 pnEPB7fm0.net
質問お願いします。
環境はWindows10でXAMPP7.4.21です。
exec('ipconfig', $message);
上記のPHPに、ブラウザからアクセスした場合、$message[1]が
「Windows IP 構成」と、日本語ですが、
Batファイルで、「c:\xampp\php\php.exe d:\www\test.php」で実行した場合、$message[1]が
「Windows IP Configuration」と、英語です。
PHPが5の時はどちらも日本語だったのですが、XAMPPのアップデートでPHPが7になったらこの現象が起きました。
Batの時にも日本語にするためには、なにをしたら良いでしょうか。
どうぞよろしくお願いいたします。
485:デフォルトの名無しさん
21/07/22 15:43:09.09 b8/cFbDKM.net
>>463
言ってる意味がおおよそ理解できたのですが。
・暗号化
可逆な存在
=複合することができる
=変換方式が決まっているため、だれでも復元(decode)できる。
可逆な存在といえば「Base64」
エンコード(暗号化)も出来るし、デコード(複合化)もできる。
(でもね、厳密には暗号化=エンコードとは言えないんだよ…)
(詳しくはもう少し下で…)
逆に、不可逆な存在といえば「SHA-1」
こっちは複合化することが出来ない。
画像をハッシュ関数化してそれをもとに画像を表示させる方法がわからないんですが、
phpで可能なんでしょうか?
486:デフォルトの名無しさん
21/07/24 10:11:35.97 CXOLw81IM.net
暗号化と符号化の違いがわからなかった時期が俺にもあったなぁ
487:デフォルトの名無しさん
21/07/26 09:39:33.21 nRSOkyaR0.net
質問です。
JSONファイルを読み込もうとしたのですがうまくいきません。
$url = "URLリンク(f.irbank.net)
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json, true);
488:デフォルトの名無しさん
21/07/26 09:43:24.61 UUQ7nGaW0.net
うちはできてる
489:デフォルトの名無しさん
21/07/26 09:51:26.23 nRSOkyaR0.net
うう…マジか
XAMPPのローカル環境だから上手く行かないのだろうか?
490:デフォルトの名無しさん
21/07/26 10:38:53.43 rdRO2HTr0.net
せめてエラーログくらい貼りなよ
491:デフォルトの名無しさん
21/07/26 11:26:45.16 DTdYSzy80.net
全く読めない
このファイルは、UTF-8 ではない?
492:デフォルトの名無しさん
21/07/26 11:43:48.93 rdRO2HTr0.net
>>479
レスポンスがbrotliで圧縮されてる
そのままブラウザに出力したいだけならContent-Encodingを設定しておくだけ
header('Content-Encoding: br');
jsonとして読み込みたいならbrotliのエクステンションをインストールしてからデコードした上でjsonにデコードする
493:デフォルトの名無しさん
21/07/26 20:20:23.98 BzqZLuZJM.net
1つ聞きたいんですが画像ファイルのセキュリティについてです。
自分の調べた聞いて理解した範囲では画像を<img src="画像URL">で表示するのは、
画像を表示するためにそのURLにアクセスできるので危険
↓
画像をbase64にエンコードします
デコード(複合化)もできるので意味がほぼないです
↓
サイズとMIMEチェックをして画像を表示させる前に、画像ファイルである事を確認する
必要ならサイズやビット深度を変更する
URLリンク(teratail.com)で聞くと,
ファイルをアップロードするのは「サイト運営側」だけであれば問題ありません。
URLリンク(detail.chiebukuro.yahoo.co.jp)で聞くと、
mineチェックとサイズ変更しなさい、
できればアップロード時のファイル名を元のものから変更する、自サイトのページ内に配置された画像としてしかアクセスを禁止するなどしなさい
結局どれが正解なんでしょうか?
494:デフォルトの名無しさん
21/07/26 20:26:04.88 B9v6ZV500.net
>>485
どのようなリソースをどのような攻撃から守るかの仕様が提示されない以上正解はありません
セキュリティポリシーやセキュリティ設計から見直してください
実装を決めるのはその後です
495:デフォルトの名無しさん
21/07/26 20:31:09.20 7+uo32oc0.net
>>453
>>485
お前のやりたいことはWordpressの管理画面からアップした画像の表示だろ
そんなもんのセキュリティ気にして変換する奴なんていねーよ
つーかWPスレ池
496:デフォルトの名無しさん
21/07/26 21:10:41.62 B9v6ZV500.net
>>487
アップロードは常に気をはれよ
URLリンク(www.youtube.com)
497:デフォルトの名無しさん
21/07/26 22:18:00.65 7+uo32oc0.net
>>488
俺に気をはれと言われましてもw
498:デフォルトの名無しさん
21/07/26 22:31:24.99 nQwBFtLMr.net
>>487
wordpress以外でも同じでしょ?
それに管理画面からじゃなくフォルダのディレクトリに置いたファイルの話なんで画像限定じゃないですね
phpやcssのファイルでも同様かどうか知りたいです
499:デフォルトの名無しさん
21/07/26 22:44:03.71 nQwBFtLMr.net
画像ファイルのアップロードの時のセキュリティはwordpress関係なく同じでしょ
500:デフォルトの名無しさん
21/07/26 22:56:31.97 7+uo32oc0.net
>>491
WPインストールしたらアップロード周りのソース全部読んでセキュリティホール無いことを確認するの?
WPで画像表示する時は表示用PHP作ってbase64変換かますの?
そして、アップロードする時は常に気をはるの?
501:デフォルトの名無しさん
21/07/27 00:25:56.73 eUxCT57wa.net
>>492
そんなことはしませんが、最低限のセキュリティは同じでしょ?
base64じゃセキュリティにならないからファイルを関数化して複雑なファイル名にする
それプラス最低限のセキュリティ、今回は画像なのでMIMEチェック
もし自分以外のユーザーが画像を上げるなら
自サイトのページ内に配置された画像としてしかアクセスを禁止する
word pressだからセキュリティは要らないっていうのはおかしいでしょ
502:デフォルトの名無しさん
21/07/27 01:30:32.63 7P6684PB0.net
>>493
>>487 を読み返してください
WPが前提、WPのシステムからアップされたメディアファイルの話し
更に言えば、このスレに住み着いてるWPガイジへのレス(アンカー見ればわかるでしょう)で自分で弄ることが前提
そして事の発端は
>>指定画像を出力したうえでメニューを作りたい
だからね?
>そんなことはしませんが
と仰られるように、前のレスの質問にNoと言うことはWPのシステムのセキュリティをある程度信頼してるわけですよね
この件ではそれで十分だろうと言う話ですよ
セキュリティの一般論の話なんてしてませんよ
503:デフォルトの名無しさん
21/07/27 01:51:04.21 sIvc9ZAG0.net
ここはPHPの質問をするスレ
WPの質問なら移動してください
504:デフォルトの名無しさん
21/07/27 04:39:04.62 x4yitIm80.net
Word Press の質問は、web制作管理板のスレの方へ移動してください!
Laravel のスレも、この板に立てている香具師がいる。
Laravelの質問は、WEBプログラミング板の方へ!
505:デフォルトの名無しさん
21/07/27 06:50:44.81 L674X5NC0.net
>>496
お前が言うな
Rubyバカ
506:デフォルトの名無しさん
21/07/27 07:09:26.40 CFpUohJoM.net
WPスレにいる者だが絶対こっち来るなよ
ガイジ過ぎて手に負えんわ
507:デフォルトの名無しさん
21/07/27 08:14:32.01 SyBbAbx40.net
質問は>>485であってwordpress関係ないだろ
>>487が勝手にwordpressだって決めつけてる
質問も意味不明だけどね、何を聞きたいのか簡潔にしてほしい
> つーかWPスレ池
お前がいけよw
508:デフォルトの名無しさん
21/07/27 09:02:44.68 opDlelu60.net
るびースレに行ってもらえば万事解決するんじゃないかな
509:デフォルトの名無しさん
21/07/27 09:30:06.62 7P6684PB0.net
>>458 の質問者は少し前のWPのページネーションの奴だし、そいつは更に前のRSSの奴でもある
ってことでこのスレに住み着いてるWPガイジであることは確定なんですわw
何が気に食わないのか知らんけど残念だったねwww
URLリンク(teratail.com)
510:デフォルトの名無しさん
21/07/27 10:01:53.85 DZV4D5nN0.net
>>493
セキュリティと権限をごっちゃにしてそう
511:デフォルトの名無しさん
21/07/27 15:53:11.92 Dog97BpdF.net
>>495
ほんそれ
512:デフォルトの名無しさん
21/07/28 10:44:10.50 5Wbud5da0.net
>>485
関連レスをザッとだけ読んだけど、スレ回答者の中にもおかしな事を言ってるやつはわりといる
いちいち指摘してたらキリないから割愛するが、スレ回答者の皆が実務経験豊富なプロってわけじゃないからなぁ…
でもお前さんも、自分が「思い込みが激しくて頭が固いタイプ」だって事は自覚しよう
rssの質問のときも、print_r($rss); とするだけで理解できる筈の事を理解できず、質問を繰り返してたでしょ?
だからスレが荒れるんだよ? 分かる?
513:デフォルトの名無しさん
21/07/28 10:44:53.11 5Wbud5da0.net
>>485
で、元の質問は>>453でしょ?
画像を出力するコードの中にHTMLを出力すれば、意図した結果にならないのは当たり前
普通は「画像出力専用のPHP」を用意してこうやる
<img src="output_image.php?id=12345">
そして「HTMLを出力するPHP」の中で下記のようにすればいいだけ
<html>
<body>
<img src="output_image.php?id=12345">
</body>
こういう発想ができないのは、頭が固い証拠
どうしても1つのPHPファイルの中で、画像の出力とHTMLの出力とを同時に行いたい場合はこうする
echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('img/abc/123.jpg')) . '">';
要するに、画像(バイナリデータ)をbase64でエンコードし「文字列(テキストデータ)として出力」すればいい(インラインイメージと呼ぶ)
これに「セキュリティ的な意味はほぼない」ので、勘違いしないよう
インラインイメージで画像を出すかどうか?ってだけ
まぁこんな事をやってもメリットなんか無いから、普通は「画像出力専用のPHP」を用意する
514:デフォルトの名無しさん
21/07/28 10:46:52.30 5Wbud5da0.net
>>485
>>505に書いたoutput_image.phpの仕様がもし
output_image.php?path=img/abc/123.jpg
のように、画像のパスを渡したらその内容をそのまま表示するとなっていた場合、「パストラバーサル」と呼ばれる脆弱性が発生する危険性がある
例えば、pathの値が「img/../../../secret.txt」だった場合、意図せずsecret.txtの中身が第三者に読まれてしまうって事ね
だから、そうならないようpathの値をしっかりチェックしないといけないのだけど、一連の質問を見ている感じ、あなたにそれを自前でやるのは無理だと思う
なので、「ファイルパスを渡す」のではなく、最初の例のように「画像を識別できるIDを渡す」ようにすればいい
※?path= で値を受け取るPHPをインターネット上に公開し、ログを取ってみるといい
※笑うぐらい攻撃があちこちから飛んでくるのが確認できるから
515:デフォルトの名無しさん
21/07/28 10:50:19.40 5Wbud5da0.net
>>485
最後に
アップロード処理が管理者にしかできない = 第三者に変なファイルをアップされる心配がないのであれば、
<img src="img/abc/123.jpg">
で別にええのよw
img/abc/123.jpg というファイルパスを第三者に知られたくないなら、>>505の例のように「間にPHPをかまして出力」すれば良いってだけ
逆に、第三者に変なファイルをアップされる心配があるのであれば、「アップロード処理の際に(出力の時ではなく)」厳密なチェック処理をしないとダメ
それについては、>>466さんも紹介してくれている
URLリンク(qiita.com)
を読めばいい
・第三者が自由にファイルがアップロードできる
・アップロード処理の際に上記のようなチェック処理ができてない
・アップロードされたファイルへ第三者がアクセスできる
3つの条件を満たしているとセキュリティ的にヤバいよねってだけ
例えば、「任意のファイルを自由に読み書きできるPHPファイル」をアップロードしそれがそのまま実行できたらヤバいでしょ?
分かる?
516:デフォルトの名無しさん
21/07/28 12:52:23.66 9bJDIHUz0.net
釣り質問にマジレスすんなよアホ
517:デフォルトの名無しさん
21/07/28 12:58:32.36 pYNLf1nF0.net
釣りレスですしw
518:デフォルトの名無しさん
21/07/28 16:52:40.91 5Wbud5da0.net
>>476
ゴミレスに埋もれて気づかなかったw
PHPの記述を
exec('ipconfig', $message);
↓
exec('chcp 932 | ipconfig', $message);
に変えたら上手くいくと思う
932はCP932(SJIS)の事ね
519:デフォルトの名無しさん
21/07/28 16:54:11.72 5Wbud5da0.net
520: class="reply_link">>>479 error_reporting(E_ALL); ini_set('display_errors', 1); $url = "https://f.irbank.net/files/8700/fy-profit-and-loss.json"; $json = file_get_contents($url); var_dump($json); ってやったらどうなる? string(1676) "{"meta":{"type":"\u696d\u7e3e","item":{"\u5e74\u5ea6":["\u58f2\u4e0a\u9ad8",… みたいなレスポンスが返ってこない? とりあえず↓の行は要らんでしょ $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); >>481 関係ない PHPのバージョンぐらいは書いた方がいいが
521:デフォルトの名無しさん
21/07/28 20:23:13.38 jpPdNADXr.net
>>507
それをあわせてファイルをチェックするのが
MIMEチェックをして画像を表示させる前に、画像ファイルである事を確認するってことですよね?
画像をecho '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('img/abc/123.jpg')) . '">';で表示して
MIMEチェックするのがそんなに難しいことなんですか?
522:デフォルトの名無しさん
21/07/28 21:08:58.35 IWCDcnnv0.net
>>510
どうもありがとうございます!
とても助かりました
523:デフォルトの名無しさん
21/07/28 22:44:28.91 5Wbud5da0.net
>>512
MIMEのチェックが必要なのは、「第三者が」画像の「アップロードをするとき」の話ね
画像を表示させる前にそんなものは要らない
> MIMEチェックするのがそんなに難しいことなんですか?
PHPでアップロード処理した際、MIMEタイプは $_FILES['hoge']['mime'] に入るんだけど、
それは偽装できる
だからその値は信用せず mime_content_type() などで別途チェックしようってこと
当たり前だが、自分しかアップロードしないならそんなチェックはしなくていい
つかさ、「自分(管理者)しか画像をアップロードしない」のか
それとも「第三者も画像をアップロードする」のか、
まずはそこをハッキリさせるべき
だから回答もめちゃくちゃになる
524:デフォルトの名無しさん
21/07/29 05:06:26.04 Bm0Z0U0B0.net
画像データの中に、ウイルスなどを入れてくるかも知れない
だから、本当に画像形式なのか、全バイト調べる必要がある
525:デフォルトの名無しさん
21/07/29 05:43:31.56 4AVEtKuA0.net
>>514
> 当たり前だが、自分しかアップロードしないならそんなチェックはしなくていい
これ、管理画面からしか画像アップロードを許さないって状況を言ってるんだと思うけど、その場合もちゃんとチェックすべき
他の脆弱性と合わせて管理者権限でアップロードする手口があるので、このへんで手は抜かないほうがいい
526:デフォルトの名無しさん
21/07/29 09:05:26.98 rmmFdFBh0.net
自分で変なファイル置いちゃうかもしれんしな
527:デフォルトの名無しさん
21/07/29 09:20:26.22 zpf7CT600.net
え?お前らSFTPで画像アップロードする時なんかもMIMEタイプのチェックやってるの?
管理者権限奪取されるような状況でMIMEタイプのチェックなんか意味ないだろw
528:デフォルトの名無しさん
21/07/29 09:39:40.25 rmmFdFBh0.net
自分WPしらんから適当言ってる
529:デフォルトの名無しさん
21/07/29 11:01:03.28 CBbl/boe0.net
>>516
>>453に "wp-content/uploads/2021/07/7mgpH3K.jpg"
ってパスがあるからWordPressだよね
WordPressの管理画面からアップロードされたファイルは、
デフォのディレクトリ構成なら最終的には wp-content/uploads/ 以下の「公開ディレクトリ」に置かれる
なのでWordPressへその画像が表示される際も
<img src="URLリンク(example.com)○○.jpg">
という形になる
だったら>>453も単に
<img src="URLリンク(example.com)○○.jpg">
とすれば終わりの話だよw
でも、何がしたいのかよく分からんが、>>453ではわざわざ readfile() とか使ってるw
まぁでも、WordPress管理画面から自分がアップロードし公開ディレクトリに置かれたものなのだから、
readfile() でそれをそのまま出力しても問題はないさ
530:デフォルトの名無しさん
21/07/29 11:02:30.36 CBbl/boe0.net
>>520の話は俺より先に
ID:7+uo32oc0
さんが指摘してるし、>>494さんもそれをフォローしてる
そこへゴチャゴチャ言うのがいるから話がこじれる
453は「HTMLとPHPの役割分担すら理解できてないヤベー人」なわけで、
そんな人へゴチャゴチャ言っても理解できるわけがないのにさ
WPスレへ行けといくら書こうが無駄なのだし、
さっさと問題を解決しスレから居なくなってもらうのがベターかと
531:デフォルトの名無しさん
21/07/29 11:13:22.62 WLwj6dDv0.net
当人は自分宛レスに書かれた内容の三割も理解出来ていなさそう
532:デフォルトの名無しさん
21/07/29 11:17:31.59 HtmB+4p50.net
セキュリティの一般論なんか持ち出すのがいけない
533:デフォルトの名無しさん
21/07/29 12:43:26.88 Bm0Z0U0B0.net
>>520
>だったら >>453 も単に
<img src="URLリンク(example.com)○○.jpg">
とすれば終わりの話
公開ディレクトリなのに、URL で書かないといけないの?
相対パスで書けないの?
534:デフォルトの名無しさん
21/07/29 12:51:10.23 ELCmA1Vb0.net
もう当人居なくなってるだろ
535:デフォルトの名無しさん
21/07/29 13:05:58.67 k08R/6yd0.net
>>521
ID:7+uo32oc0 と >>494 はワッチョイ見れば同一人物ってわかるよ
そして私だ!フォローthx!
あとね
ワッチョイ 532c-MYQi
ID:Bm0Z0U0B0
はRubyガイジなんでスルー推奨
536:デフォルトの名無しさん
21/07/29 13:14:38.56 kQQSV7PN0.net
こいつサイトに載せるバナーイラストをお絵描き板で個スレ立てて練習してるやつと同一かな?
pixivを超えるサイトを作るらしいぞ。だから第三者がアップロードする事に拘ってるんだと思うぞ。
537:デフォルトの名無しさん
21/07/29 15:46:28.70 1U+sby820.net
>>524
WPではアップした画像がWPを通して表示される時は絶対URLで記載される
538:デフォルトの名無しさん
21/07/29 18:37:55.60 CBbl/boe0.net
>>526
たしかに同一人物だ あまりにも口調が違うから気づかなかったw
Rubyガイジの件もサンクス これも気づいてなかった
>>528
だね
フィルタ使って 'attachment_link' や ''wp_get_attachment_url'
に対し絶対URLを相対パスへ変換するフィルタを適用すれば
相対パスに変える事もできるけどね
526が教えてくれたけど、524はRubyガイジみたいだから相手にしなくていいよ
539:デフォルトの名無しさん
21/07/29 18:43:11.67 CBbl/boe0.net
Rubyガイジのレベルは>>483見ればお察しやねw
WordPressスレ見てみたけど、そっちにもRubyガイジが顔出してるしスレがまともに機能してなかった
そりゃこっちに来るわ
540:デフォルトの名無しさん
21/07/30 15:35:03.64 B9OLCwSG0.net
2005年前後にに発行されたPHPの本がたくさんあります
バージョン4や5辺りです
以前はこれらの本を見ながら簡単なことをやったりしていましたがもう完全に忘れています
今、小さな店のweb予約システムをPHPで作りたいと思っています
今はPHPのバージョン7か8でしょうか
新規に本を揃えた方がいいですよね?
おすすめの本、勉強方法などあったら教えてください
スレチであれば誘導お願いします
541:デフォルトの名無しさん
21/07/30 15:41:02.56 c+ndNg5Q0.net
バージョン7.3以上がいいよ
残念ながら4や5はもう完全に化石
542:デフォルトの名無しさん
21/07/30 16:28:29.52 7i2immr80.net
PHPの本は半分くらい攻撃対策がページを占めてる印象
543:デフォルトの名無しさん
21/07/30 17:00:35.86 UtQvC7c20.net
>>531
本が必要なら買い換えるべき(最低限PHP7…できれば7.3~対応のものを )
作りたいものがはっきり決まってるのはとても良い事
とにもかくにも、まずはローカルにまともな開発環境を作ろう
スレの質問を見てると、開発環境を作れていないであろう人の質問は色んな意味でヤバいw
開発環境を作るのははじめは面倒だと思うけど急がば回れ
※533はRubyガイジなので注意
544:デフォルトの名無しさん
21/07/30 19:29:14.24 B9OLCwSG0.net
どうせなら新しい8を勉強した方が効率いいかなと思ったんですけど、今使っているレンタルサーバがまだ8に対応してませんでした
7.3以上ですね、わかりやすそうな本を店頭で探してみます
予約システムの作り方とか似たようなものがないかも探してみよう
ローカルの環境開発、どの本にも書いてあったので昔入れてました
懐かしい
これも入れておきます
いつ完成するかわかりませんが久しぶりで楽しみです
アドバイスありがとうございした
545:デフォルトの名無しさん
21/07/30 19:29:28.58 r27NHL07r.net
img.phpを用意して<img src="output_image.php?id=12123">
header.phpのbodyに<img src="output_image.php?id=12123">と追加したのですが表示されないようです。
output_image.php?idで画像を表示できるのでしょうか?
546:蟻人間
21/07/30 19:34:30.43 GDRR8sIEd.net
確認します。
img.phpというファイルはありますか?
output_image.phpというファイルはありますか?
output_image.php?id=...
に直接アクセスして画像は表示されますか?
547:デフォルトの名無しさん
21/07/30 19:40:25.38 r27NHL07r.net
画像パスがupload.php?item=12123となっているのに対し
<img src="upload.php?id=12123">では取得できない気がするのですが、idから取得できるんでしょうか?
548:デフォルトの名無しさん
21/07/30 19:46:25.67 r27NHL07r.net
output_image.phpというファイルを作って中に<img src="upload.php?id=12123">
header.phpのbodyに<img src="upload.php?id=12123">と記載しても表示されません
直接output_image.php?id=12123にアクセスしても表示されないようです
549:デフォルトの名無しさん
21/07/30 19:58:25.74 r27NHL07r.net
wordpressの場合特殊なのか、idから画像をリサイズして表示するときに<php echo wp_get_attachment_link( 12123 ); ?>で表示されました。
テンプレートタグ/wp get attachment link - WordPress Codex 日本語版
550:デフォルトの名無しさん
21/07/30 19:58:58.68 ScATWV4k0.net
そらそうだろ
551:デフォルトの名無しさん
21/07/30 20:00:25.98 r27NHL07r.net
いずれはwordpressではなくデータベース軸でサイトを立ててみたいので、output_image.php?id=...で
なぜ表示できないのかも知りたいんですが…
552:デフォルトの名無しさん
21/07/30 20:09:34.89 r27NHL07r.net
<php echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('wp-content/uploads/2021/07/7mgpH3K.jpg')) . '">';?>
だと同じように表示されました。教えていただきありがとうございます。
第三者がアップロードするかどうかでセキュリティを考えるんですね、コメントしかりページナビしかりマイページ機能しかり。
553:蟻人間
21/07/30 20:34:44.87 GDRR8sIEd.net
WordPressはWPの作法に従わないと動かないことがあるよ。裏でCSSやら.htaccessやらJavaScriptやらが動いていて、実際の処理は隠蔽されてるから。
554:デフォルトの名無しさん
21/07/30 21:45:55.50 r27NHL07r.net
>>544
ありがとうございます
555:デフォルトの名無しさん
21/07/30 21:52:20.21 r27NHL07r.net
> 「不正な画像をアップロード」できるのも内部犯に限られることになる
XSS を利用して不正アップロードする手口が徳丸さんのとこで紹介されていました。
URLリンク(www.youtube.com)
WordPress なら外部から似たような攻撃でアップロードされる可能性があるので、プログラムレベルでも適切にアップロード対策をしておくべきだと思います。
このような回答が追加されていたのですが外部からも勝手にアップロードされる危険性はあるのでしょうか?
556:デフォルトの名無しさん
21/07/30 23:36:35.91 1geFHcN20.net
ありますよ。実際に自分はアップローダーからマルウェア仕込まれて
VPSサーバーを総入れ替え舌経験があります。
WordPress宛の攻撃は毎日あるし、できる対策は全てしたほうが良いでしょうね
557:デフォルトの名無しさん
21/07/31 01:52:34.20 v7hkUDSma.net
この動画を見たところ検索フォーム?のXSS対策コードの記載漏れから不正コードを入力されて管理画面に侵入されたみたいですが
要するに第3者が侵入出来るような検索フォームやお問い合わせフォームやコメントフォームやマイページの対策を怠らない事で防げるということですよね?
自分のみがアップロードする場合は該当しないのでしょうか?
558:蟻人間
21/07/31 03:18:27.24 ZYWMYotdd.net
脆弱性は様々な枯れてない技術から発見されている。あのWPだってあちこちからゼロデイ攻撃が見つかっている。WP のテーマやプラグインにも脆弱性がある。度重なる更新や脆弱性に対応できないならWPを使うのをやめた方がいい。
パスワードセキュリティにも危険性がある。パスワードはセキュリティの基本であり、5文字程度の単純なパスワードはパスワードクラッカーで短い時間で突破されてしまう。攻撃者は性能の高い計算能力を持ち、世界中のどこからでも攻撃できる。パスワードは単純なのはダメ、短いのはダメ、憶測できるのはダメ。
あるいはソーシャルハッキングや電波漏れなどの未知のハッキング手法からも攻撃が成立することがある。
こうすれば絶対にハッキングされないという方法はないが、危険性が高いものを避けることは可能。
559:デフォルトの名無しさん
21/07/31 10:31:19.92 fqpnvpaJ0.net
>>548
WordPressの場合、自分は管理画面のURL変えてIP制限入れてますよ。
自分のみがアップロードなら、自分しか使えないIPアドレス制限した方がいいし、
ホスト名とか環境変数とか、そこまでチェックした方が確実だと思います。
ま、一番良いのはWordPress使わないことですけどね
560:デフォルトの名無しさん
21/07/31 10:46:33.80 z/SvtBD30.net
>>550
動画見ろよ
IPの制限無関係に投稿する仕組みの紹介だぞ
561:デフォルトの名無しさん
21/07/31 11:04:47.11 JJoM48pY0.net
わざとセキュリティホール作って、ほらね?危ないでしょ?ってアホかよw
まずWPに同じセキュリティホールあるかの議論が先だろw
無いけどw
562:デフォルトの名無しさん
21/07/31 11:34:42.98 z/SvtBD30.net
>>552
ユーザ投稿のプレビュー箇所とアップロード機能を持つ管理画面って,WordPressで頻繁に見るんだが?
それぞれに問題箇所があるとwebshell置かれて終了!の可能性を指摘する動画だけど、理解できてる?
563:デフォルトの名無しさん
21/07/31 11:37:50.11 BUpo1U8M0.net
プログラムで例えば4×4のマップがあった場合、4という数字は私は格子点数と呼んでいますが、皆さんは何と呼びますか?
564:デフォルトの名無しさん
21/07/31 18:56:05.10 JJoM48pY0.net
>>553
一連の流れでセキュリティの指摘をしたわけではなく、ただ動画を宣伝したかっただけなんですね!
理解できましたw
565:デフォルトの名無しさん
21/08/02 10:21:18.11 JwyUb7gK0.net
>>536
Oh...
それ、単に「例」として出しただけなのでw
例えば(あくまでも例え話ねw)
ID | 画像のパス
1 | hage/abc.jpg
2 | fuge/345.jpg
みたいにデータ管理してたとして、
id=1 を渡せば hage/abc.jpg を取得できるようにすれば結果的に
output_image.php?id=1
とすれば、「hage/abc.jpg」を表示できるでしょ?ってこと
それを、
output_image.php?path=hage/abc.jpg
みたいに直接パスを渡すような設計にしてると、あなたのレベルでは危ないよってだけ
566:デフォルトの名無しさん
21/08/02 10:45:18.84 JwyUb7gK0.net
>>546
> 外部からも勝手にアップロードされる危険性はあるのでしょうか?
そりゃ「可能性」はあるよw
人間が作るものにバグ(脆弱性)がないものなんてない
で、>>546にはその動画の意味は理解できる?
理解できてないよね
理解できてないのに、何をどうやって「対策」するの?w
その動画に指摘されている脆弱性は、「プラグインのXSS脆弱性を悪用した攻撃」なので、
対策といったところで、あなたのレベルでできるのは「WP本体やプラグインは常に最新版を使う」事ぐらいだよ?
※その動画の攻撃例は管理画面にIP制限なんかしても無駄ですw
結局、「画像は546本人しかアップロードしない」んだよね?
だったら、「アップロードした画像には問題ない」事を前提に話を進めようよ
546は、「HTMLやPHPの基礎がないままWordPressから始めた」のがいけない
基礎がガタガタなの
そんな人が細かい事を気にしたところで、話は前に進まんよ
567:デフォルトの名無しさん
21/08/02 10:50:01.92 JwyUb7gK0.net
>>552
>>555
546の動画の例は、WordPressでECサイトを構築する際の「超定番」プラグインEC-CUBEのXSS脆弱性を悪用したもので、
「実際に悪用事例も出た」ものだけどね…
そんな事すら理解できないなら、横からしゃしゃり出てこずに黙っておけw
568:デフォルトの名無しさん
21/08/02 10:59:23.86 JwyUb7gK0.net
>>546
>>557に補足しとくと、WordPress本体・プラグイン・テーマファイルの致命的な脆弱性を悪用され、
WordPress権限から自由にファイルのアップロード・編集が可能になった場合、
サーバー内の画像をPHP経由で出力する際のセキュリティ(笑)なんか、いくら考えても無駄ですw
その点については>>518さんが指摘している通り
例えるなら、「ヘルメットを被っていたら快速電車にダイブしても大丈夫だよね?」って聞いてるみたいもんw
だから、自分しかアップロードしない画像ファイルは安全であるという前提で、話を進めようよ…いや頼むからそうしてくれw
てかRSSの時もそうだけど、たったこんだけの事にどんだけ時間かけてるのよw
569:デフォルトの名無しさん
21/08/02 11:36:09.87 CDsmjzwf0.net
いいから構うやつもまとめてWPスレ行って帰ってくるなよ
570:デフォルトの名無しさん
21/08/02 11:55:16.38 jY8DN4600.net
自演ですし
571:デフォルトの名無しさん
21/08/02 14:06:37.03 LY8fDkppd.net
最初から自分しかアップロードしない前提なのにどんだけレスしたら気が済むの、このセキュリティガイジ
572:デフォルトの名無しさん
21/08/02 14:39:06.84 nA0UljqA0.net
セキュリティガイジは別人だろ
ガイジなのは質問者、それに対しセキュリティ全波の話を持ち出してる人、煽るしか能のない人
573:蟻人間
21/08/02 14:51:48.05 LkFRX9kvd.net
>>554
普通にサイズでよくね?
574:デフォルトの名無しさん
21/08/04 15:31:27.53 QhYrANy70.net
Array(a1,b1,c1,d1,...)とArray(a2,b2,c2,d2,...)を足し算して、
2次元配列にする時って、どうすればいいでしょうか?
$x[0]がArray(a1,b1,c1,d1,...)の時、
$x[1] = $s;としたら、
$xがArray(a2,b2,c2,d2,...)で上書きされてしまいました。
575:デフォルトの名無しさん
21/08/04 15:33:03.22 QhYrANy70.net
$s=Array(a2,b2,c2,d2,...); です。
576:デフォルトの名無しさん
21/08/04 15:44:34.90 QhYrANy70.net
foreach とか for とか使うしかないでしょうか?
577:565-567
21/08/04 16:12:58.96 QhYrANy70.net
foreach とか for で、解決しました。
578:デフォルトの名無しさん
21/08/04 16:36:34.91 BE8GLseK0.net
Ruby なら、zip で複数の配列を、組み合わせられる
ary_1 = [ 1, 2, 3 ]
ary_2 = [ 10, 20, 30 ]
p tmp_ary = ary_1.zip( ary_2 )
#=> [[1, 10], [2, 20], [3, 30]]
p results = tmp_ary.map{ |a, b| a + b }
#=> [11, 22, 33]
579:デフォルトの名無しさん
21/08/04 19:56:28.27 JeeF5Fq/0.net
ゴミのような流れに草w
580:デフォルトの名無しさん
21/08/04 20:48:03.21 nRiwNpi/0.net
相変わらずRubyガイジがPHPのスレを荒らしに来るw
581:デフォルトの名無しさん
21/08/05 00:28:51.82 F8+XC2Dv0.net
PHPで接続を明示的に切る方法ってある?
本処理後、後処理としてDBの整理を行うのだが、
本処理と後処理が同程度の重さになるので、可能であればTCP接続を明示的に切りたい。
そうすればブラウザが確実に処理を始めるので、クライアント側の体感速度が上がることを期待している。
とりあえずfush()はした。出力バッファは使ってないので、ob_xxxxはやってない。
他に何かある?
582:デフォルトの名無しさん
21/08/05 00:42:12.36 N2Iw/qnR0.net
意味不明
583:デフォルトの名無しさん
21/08/05 00:45:52.55 JVVnzoun0.net
DBがクローズされているなら、PHPへのアクセスは関係ないんじゃ?
というか、設計がおかしくない?
584:デフォルトの名無しさん
21/08/05 01:01:42.06 F8+XC2Dv0.net
ああすまん、書き方が悪かった。
こちらはPHPの初心者なので、そちらが想定しているような高度なことはしていない。
「TCP接続」をDBとの接続だと想定したのだと思うが、こちらはSQLiteだ。
クライアント(ブラウザ)からのアクセスで、SQLiteを操作してhttp出力を行う。
その後、ユーザーに対しての追加の出力はないので、ここでユーザーとのTCP接続(=http接続)を切りたい。
(確かGoかNodeだとこれが出来た)
さらにその後、後処理を行うのだが、これが本処理と同じ程度に重い。
そしてexitで終了する。
ブラウザがexitにてTCP接続が切れてからパースを開始すると、体感2倍重くなってしまう。
flushでデータを全部送りきることは出来るが、
ブラウザはパースしないと全部来たことが分からないので、fulsh後にすぐ動くことは期待出来ない。
http接続が切れれば、それ以上のデータはないと確定するので、パースを確実に開始する。
だからこれを早めたい。
何か明示的に出来る方法ってある?
585:デフォルトの名無しさん
21/08/05 01:28:56.20 qQkilq/Na.net
404のっとファウンドなどのエラーページを自作しる
586:デフォルトの名無しさん
21/08/05 01:43:30.62 JVVnzoun0.net
>>575
クライアントに応答を返すPHPは、応答を返したら、
後処理を行うPHPを起動し、自身はその終了を待たずexitする
587:デフォルトの名無しさん
21/08/05 03:48:16.16 9Ap3lZssd.net
>>575
~ここまで本処理
// 結果を待たずに次の行へ進む非同期コマンド
exec('php 後処理.php > /dev/null &');
exit;
もし後処理.phpに何かパラメーターを渡したい場合は
exec('php 後処理.php パラ1 パラ2 パラ3 > /dev/null &');
受け取る側の「後処理.php」の中で$argvに配列として格納されてる
588:デフォルトの名無しさん
21/08/05 06:36:47.33 F8+XC2Dv0.net
>>577-578
なるほど、マルチプロセスだから根本的に考え方が違うんだな。ありがとう。
(だとすると、途中で明示的に接続を切れたのはNodeか?)
マニュアルページが完全にstackoverflow並のtips集になっていることにも驚いた。
URLリンク(www.php.net)
(やたらWindowsについての言及が多いが、意外にIIS上で動かされてるのか?)
見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい。
そしていきなり環境依存コードを注入するというのはプログラマとしては頂けない。
ここら辺のノリがPHPの嫌いなところだ。
プログラマ向けに作ってないから、プログラマの常識でやってると変に嵌ったり、見落としたりする。
とはいえ、便利なのは事実だし、所詮スクリプトだと割り切るのも必要なのだろうけど。
とりあえずの問題は、開発環境がローカルホストのXAMPP(つまりwindows)で、
実行環境がレンタルサーバー(つまりLinux)ってところだが。
まあ、いずれにしてもありがとう。
この質問には確かにexecが正解のように見える。
589:デフォルトの名無しさん
21/08/05 06:50:31.72 Sb1zsMiv0.net
>>579
ローカルコマンド叩くのに環境依存がない言語なんてあるわけ無いだろ
嫌いになるのは勝手だけど、アホな理由で嫌いになるなよ
590:デフォルトの名無しさん
21/08/05 07:24:02.52 F8+XC2Dv0.net
>>580
だから発想が『プログラマとしては』おかしいんだよ。
少なくともNodeでもGoでも、環境依存無しのコードを記述出来る。
PHPでは出来ないのに、それでも良しとされてる。
そういうところが嫌いなんだよ。
覚えだが、上記の通り、明示的に切れたのは多分Nodeだ。
これはそもそもシングルスレッドだから、PHPのようにスクリプト終了=接続終了とは出来ないから当たり前だが。
そしてGoなら内部プロセス(goroutine)で、となる。もちろん環境とは依存しない。
PHPでも、session_write_closeと同様に、例えば write_close() というコマンドを作り、
そこで接続終了、それ以降の出力は全部捨てられます、とすれば、全く問題なく環境依存無しに出来る。
だからプログラマが主導して開発をしていればとっくにそうなってるはずなのに、
現実としてそうなってないから、色々無駄に戸惑う。だから好きにはなれない。
何だかんだで意外とNodeが蔓延っているのは、ここら辺の理由もある。
今回の使途ならJSのsetTimeoutでの実装の方がプログラムとしては断然美しくフィットする。
PHPで書くと、こんなコードにしかならないのかよ、と本当に愕然としてしまう。
腕が良くてもまともなコードを書けないんだよ。
それは上記の通り、PHPの開発の方向性が間違ってるからだ。
(とはいえ例の三項演算子についてはPHP8で修正されてるようだが)
まあとにかくだ、プログラマとしては禁忌に近い「環境依存コードの注入」を普通にやらせるのは異常だし、
そんな状況が放置されてること自体も異常なんだよ。
だからプログラマがPHPを好きになることはないと思うよ。
PHPを好きな奴は、他言語をまともに使えない奴だけだと思う。
591:デフォルトの名無しさん
21/08/05 07:52:13.16 Sb1zsMiv0.net
>>581
んなアホなことやりたいなら、phpでWebサーバ書けばいい
メジャーなのはないけど、ふつうにGitHubにも転がってる
そもそもフィトするもんが別にあるんだったらそっち使うのがエンジニアだぞ
592:デフォルトの名無しさん
21/08/05 08:23:37.05 F8+XC2Dv0.net
>>582
だからその発想がおかしいんだよ。フィットしてるなんて到底言えない。
PHPは「できればいい」「動けばいい」で済ませる初心者~中級者の感覚に合ってる。
だからその層には絶大な支持を受けるが、上級者には支持されない。
実際、PHPが「プログラミング言語として」素晴らしいなんて言ってる上級者は世界中でも誰一人もいないだろ。
connection_closeとかを用意すればいいだけなのに、
外部コマンドで自己ファイルをバックグラウンドプロセスとして起動する、なんて解は、頭がおかしいレベルだ。
自宅から歩いて3秒の場所に自動車で行く、に近い。
以前は「XAMPPなんて捨てろ。どうせ本番環境では動かないし、XAMPPで開発する意味はない」とか言ってる奴も居たが、
実際はこの辺の、それが環境依存コードだと理解出来ないレベルの初心者が勝手にやらかしまくってるだけだと思うよ。
そしてその意味も分からず、「XAMPPなんて捨てろ」だけ真に受けた初心者が、
例えば>>394みたいに、右も左も分からないのにリモート環境で開発する、みたいな、余計におかしな事をやらかす要因となってる。
そしてその根元は、PHP自体に落とし穴がありまくるからだ。
なんでそこで環境依存コードを注入するしか解がないの?というね。
が、まあ、parallelとかphtとかはここら辺の対策用なのかな?
それにしても connection_close とかの単純な解の方が断然いいが。
593:デフォルトの名無しさん
21/08/05 08:42:00.19 Sb1zsMiv0.net
>>583
使ってる方からするとWebサーバレベルのハンドリングを意識しなくて良いレベルで抽象化されていることが使いやすいし、不足箇所は最近だとフレームワークが補完してくれている
ところで、支持してない上級者って何?
サーバサイド言語として、phpが必要ないって言っている人がいる?
普通に用途が合えばphp選択するのがエンジニアだと思うけど?
594:デフォルトの名無しさん
21/08/05 08:50:37.83 F8+XC2Dv0.net
というか、思うにこれはPHPだと「出力用」と「DB整理用」のphpを別にして、
「DB整理用」は別にcronで叩く、というのが一般解なのかな?
これ自体も外部依存しているのでよい解ではないが、
ここまで蔓延っているPHPがこの辺の「普通にやる処理」を上手く記述出来ないのもあり得ない。
だとすると、現実的にはこの解なのだろう。
とはいえ、最安のレンタルサーバーだとcronは使えないし、
纏めて整理する時に命中したらその時だけ奇妙に遅くなるわけで、
出来ればマメに整理しておきたいのだが。
595:デフォルトの名無しさん
21/08/05 08:55:46.01 yR6UN7xmd.net
>>583
~ここまで本処理
//接続が切れてもスクリプトを実行させる
ignore_user_abort(true);
// メッセージ表示ページへ飛ばす
header('Location: 本処理完了しました.html');
flush();
ここから後処理~
環境依存使わないなら、こんなんでどうですか?