X



【PHP】下らねぇ質問はここに 9
■ このスレッドは過去ログ倉庫に格納されています
0639デフォルトの名無しさん (ワッチョイ 532a-5rD0)
垢版 |
2018/09/11(火) 12:49:51.36ID:swAVBRLl0
class内のプロパティに関数って指定できないでしょうか?

class Test {
public $date = date("Y-m-d");
}

というイメージです。これを記述しても
Parse error: syntax error, unexpected '(', expecting ',' or ';'

というエラーが出るので無理だと思っているのですが、
できる方法があれば教えてください。
0642634 (ワッチョイ 7ad0-O+me)
垢版 |
2018/09/11(火) 17:53:48.50ID:sA/7deNB0
>>637
アドバイスありがとうございます。
次を課題に学習を進めたいと思います。
・HTMLとPHPで値の長さに制限を掛ける
・filter_inputの使い方を理解する

mail関数に関してもmb_send_mail関数と合わせて考え直します。
セッション変数については入力されたデータを持ちまわる体で使用しようと考えているのですが、type="hidden"の方が良いのでしょうか。
今は自身の理解が不足しているので、もう一度最初から取り組みます。

アドバイスありがとうございました。

>>638
アドバイスありがとうございます。
やはり既存のサービスの方が安全ですか。
今は自身のために勉強したいと思います。

アドバイスありがとうございました。
0646634 (ワッチョイ 7ad0-O+me)
垢版 |
2018/09/12(水) 08:16:38.34ID:uWMSldyR0
>>643
参考URLありがとうございます。
hiddenとセッションの使い分けを勉強します。
0647デフォルトの名無しさん (ワッチョイ 569f-vdZN)
垢版 |
2018/09/12(水) 08:31:17.86ID:t1WfAWi+0
>>646
う、うん。
でも一番はそこじゃないんだな。
スーパーグローバル変数を書き換えるべきではないのに、
そらをしてしまっているところね。
そもそもスーパーグローバルを使わないためのfilter_inputだから。
最初は誰でもそんなもんだから頑張ってね。
0648634 (ワッチョイ 7ad0-O+me)
垢版 |
2018/09/12(水) 08:36:21.52ID:uWMSldyR0
>>647
さっそく勘違いしてしまいました。
アドバイスありがとうございます。
0649デフォルトの名無しさん (ワッチョイ 5e92-fTNn)
垢版 |
2018/09/12(水) 11:26:01.33ID:/jhmkHwQ0
どうしてもわからないので質問お願いします。

私はWindows7でxamppを使いPHPを動かしています。
類似画像の比較のため「libpuzzle」というライブラリを使いたいのですが、インストールのやり方がわかりません。
インストールが簡単とのことで下記のページを参考にしようと思っているのですが、何をやっているのかわかりません。

https://fei-yen.jp/maya/wordpress/blog/2011/05/05/php%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6%E5%88%A4%E5%AE%9A%E3%81%AE%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/

ひとまず「libpuzzle-0.11.tar.bz2」はダウンロードしました。
0650デフォルトの名無しさん (ワッチョイ 569f-vdZN)
垢版 |
2018/09/12(水) 12:09:08.51ID:t1WfAWi+0
そのURLを見たけど、tarファイルを展開してLinuxでコンパイルしてるよね。
この時点でWindowsはまったく該当しないので見てもわかるわけない。
Windows用のコンパイル済みバイナリをインストールするのが正解かと。
それか、そのファイルをWindowsで自前コンパイルするか。
0651デフォルトの名無しさん (ワッチョイ 5e92-fTNn)
垢版 |
2018/09/12(水) 12:24:56.89ID:/jhmkHwQ0
ありがとうございます。

いくつか調べてlibpuzzleがC言語で作られているはわかりました。
Windowsだとsoファイルではなくdllファイルで動かすみたいだから
libpuzzle.cをコンパイルしてdllにする、という感じなのでしょうか?
0655デフォルトの名無しさん (ワッチョイ 569f-vdZN)
垢版 |
2018/09/12(水) 19:23:24.37ID:t1WfAWi+0
>>654
そう。
言われてハッとしたんだが、もしかして俺すげー嘘ついてる?
フレームワーク無しなら$_SESSIONに代入せざるを得ないか?
何かもう忘れたわ。

適当な記憶でたまに嘘ぶっこくから少し自重する。
0658デフォルトの名無しさん (ワッチョイ 5e92-fTNn)
垢版 |
2018/09/12(水) 23:14:04.91ID:/jhmkHwQ0
libpuzzleはインストールが困難と判断したので、
他のものを調べたところ、Perceptual Hashが良さそうだったので変更しました。

コンポーザーをダンロードして、インストールはできました。

ですが、実行すると「Uncaught Error: Class 'Jenssegers\ImageHash\ImageHash' not found」といったように認識されません。
Windows7のXAMPPだとuseの書き方が違うのでしょうか?
ソースは以下の通りです。


use Jenssegers\ImageHash\ImageHash;
use Jenssegers\ImageHash\Implementations\DifferenceHash;

$hasher = new ImageHash(new DifferenceHash());
$hash = $hasher->hash('path/to/image.jpg');

echo $hash;
// or
echo $hash->toHex();
0662デフォルトの名無しさん (ワッチョイ 17b3-+ow7)
垢版 |
2018/09/13(木) 08:13:46.95ID:1dHQYyj40
投稿フォームは、確認画面なくすと session 使う必要がなくて、スマートな実装になるよ。
そもそも確認が必要な内容かどうか検討してみると良いです。
確認が必須なら、モーダルで一旦表示させて投稿させると UX も向上して happy。
ただ、画面はちょっとややこしくなるけどねぇ。。。
0666デフォルトの名無しさん (スッップ Sdbf-t6RF)
垢版 |
2018/09/14(金) 11:13:27.37ID:LYVyvVvXd
提唱者が逃げ出したから、
こういう時にどう使ったら良いか
教えてくれない
0669デフォルトの名無しさん (ワッチョイ 97b8-Moip)
垢版 |
2018/09/16(日) 09:00:18.99ID:yeSA5Nar0
考えられるパターンとしては
1.入力値の検証はせずそのまま出力する
2.入力値の検証はせずhtmlspecialcharsを使う
3.入力値の検証→問題はないのでそのまま出力
4.入力値の検証→問題なのでhtmlspecialcharsを使う
5.入力値の検証→問題はないがhtmlspecialcharsを使う
6.入力値を出力前に無害化してそのまま出力

1は当然やっちゃだめ
6は元の入力値と異なる可能性が生まれるので使うなら重要でない箇所限定(非推奨)
5は冗長だが5が一番おすすめ
0670デフォルトの名無しさん (ワッチョイ 9f80-bWaM)
垢版 |
2018/09/16(日) 19:43:02.43ID:Fs79WbqO0
phpの質問じゃないかもしれないんだけど
URLから指定のディレクトリにアクセスした時に
ファイル名が何だろうと指定のファイルを参照させることって出来ますか?

hoge.com/rand/test.txt
hoge.com/rand/aaa.jpg

randディレクトリにアクセスしたら
ファイルの有無に関わらず
hoge.com/rand/index.phpを参照させて
test.txtやaaa.jpgのURL文字列に応じて
phpが振る舞いを変えてコンテンツを表示させたいです

そんなこと可能でしょうか?
0677デフォルトの名無しさん (ワッチョイ bfd5-Un1/)
垢版 |
2018/09/17(月) 12:21:19.45ID:hbuTlOjm0
>>676
その方がいいと思うよ。
HTMLを修正する理由と処理を修正する理由は大抵違うから、それぞれ分けておくと都合がいいと思う。
分業の面でもいいし、処理の見通しも良くなる。

ただそう作るなら、表示(見た目)のためのコードは処理側から排除するのがいいと思う。
エスケープはもちろん、例えばマイナスの数値を表示するのに▲を付ける仕様だったとして、それを行うコードはHTML側に実装する感じ。
処理側で▲付きの文字列を作るようなことするとカオスになっていく。
0678デフォルトの名無しさん (ワッチョイ bfd5-Un1/)
垢版 |
2018/09/17(月) 12:29:30.95ID:hbuTlOjm0
>>676
そしてPHPはHTMLを分けるというのが非常に簡単にできるから、やらなくちゃ損くらいに思った方がいい。

<?php
:
いろいろ処理;
:

include 'gamen.html';
?>

みたいに include するだけで表示されるんだから。
実際には gamen.html にはわずかなPHPコードも入る純粋な HTML ではないから拡張子を .html とするよりは、.php なり .tpl(テンプレート)なりそれっぽいのにしておくといいと思う。
案外 .php にしておくと、ブラウザからそれを直接見てもPHPのコードは直接見えないから手軽な安全策かも。
0680デフォルトの名無しさん (アウアウカー Saeb-Gwc+)
垢版 |
2018/09/18(火) 18:36:46.23ID:LS9+DTCza
今回乗っ取りが可能な脆弱性が発見されましたが、その脆弱性を試したいです。
どうすればいいのでしょうか?
0682デフォルトの名無しさん (ワッチョイ bf4b-72gh)
垢版 |
2018/09/19(水) 20:12:04.29ID:2g+A18ll0
laravelを始めようと思うのですがrailsと比べて何が良くて何が悪いのか聞きたいです
僕自身railsはチュートリアルやったくらいしか知りません
0683デフォルトの名無しさん (ワッチョイ 2d8a-Lcjh)
垢版 |
2018/09/20(木) 08:52:56.46ID:2cUVSblD0
set_file_buffer (stream_set_write_buffer)が動作しないということが2003年ごろから言われているみたいですが
今さっき検証してみたところやはり-1が返ってきて動作していないようです
何故こんな関数が未だに存在しているのか、わかる方よろしくお願いします
http://jp2.php.net/stream_set_write_buffer
0687デフォルトの名無しさん (ワッチョイ fe92-tHrl)
垢版 |
2018/09/21(金) 18:17:31.43ID:2dxDcAKa0
>>658です。
お返事遅くなってしまい申し訳ないです。

>>660
うまくいきました。
XAMPPだと相対パスだとうまく行かなかったのですが、
絶対パスだとうまく行きました。

どうもありがとうございます。
0691デフォルトの名無しさん (ワッチョイ c9b8-gcds)
垢版 |
2018/09/25(火) 20:25:06.12ID:YkAMOZHs0
結果は同じでもどちらに主軸をおくかによってニュアンスが変わる
例えばコンサート会場でチケットを持っている人は通し持ってない人は通さない場合

チケットを持っている人を通したいに主軸を置くと普通のスタッフを連想するが
チケットを持ってない人を通さないに主軸を置くと警備員のようなもっとお硬い物を連想する

$A===$Bを比較したいのか$A!==$Bを比較したいのか
自分が何をやりたいのかどこに主軸をおきたいのか考えれば自ずと答えは出るでしょう
0693デフォルトの名無しさん (ワッチョイ c198-DHaP)
垢版 |
2018/09/26(水) 14:54:46.71ID:eJD5a6UK0
$var = getA();
if (!$var) {
 $var = getB();
}
if (!$var) {
 $var = getC();
}
if (!$var) {
 $var = getD();
}
if (!$var) {
 return false;
}

return $var;

こういうコードをもっとスッキリさせる書き方ってないですか?
0696デフォルトの名無しさん (ワッチョイ b165-coYL)
垢版 |
2018/09/26(水) 19:38:26.60ID:Rr41G2Hg0
短絡評価でbooleanが返ってくる言語だからなぁ

return getA() ?? getB() ?? getC() ?? getD() ?? false;

でnullが返ってくると順次後ろに落ちていくようには出来る
falseが返ってくると打ち切られて結果もfalseになる
0697デフォルトの名無しさん (ワッチョイ c198-DHaP)
垢版 |
2018/09/26(水) 23:01:39.30ID:eJD5a6UK0
みなさんレスありがとうございます
実際はもっとメソッド名が長く、引数が複数あり、一つ一つが若干重い処理なので
現状が一番スマートのような気がしてきました
0699デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
垢版 |
2018/09/27(木) 10:36:27.42ID:kbPnGc7o0
メソッドに応じて引数も可変ならcall_user_func_array()使えばいいだけじゃない?
そんな大層な話しか?30秒で書けるがw

function hoge()
{
  $methodArr = [
    'A' => ['a', 'b'],
    'B' => [],
    'C' => ['c', 'd'],
  ];

  foreach ($methodArr as $method => $params) {
    if ($result = call_user_func_array($method, $params)) {
      return $result;
    }
  }

  return false;
}
0703デフォルトの名無しさん (スププ Sdbf-4Fgi)
垢版 |
2018/09/27(木) 13:37:29.99ID:7B8reSZgd
メソッドや引数が減ったり増えたり順序が変わったりした時に
699なら”コード”を触らず”定義”の修正だけで済むが
693だと”コード自体”を修正する必要があるな
0705デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
垢版 |
2018/09/27(木) 13:55:31.21ID:mllxUQ0M0
>>703
hoge が呼び出す関数達の引数は hoge に渡された引数だったり別の変数だったりを含むんじゃないの。
それを事前に定義するって?
仮に定義できたとして、そんな内部のロジックに直結した定義を修正するのはコードを修正するのに加えてそんなに気安いことなの?

>>693 のコードを大体そのまま hoge.conf にでも書いて、

function hoge()
{
if(!@include_once 'hoge.conf') {
retur false;
}
return $var;
}

とでもする方がまだマシなんじゃね。
0708デフォルトの名無しさん (ワッチョイ 579e-/YFy)
垢版 |
2018/09/27(木) 14:06:18.58ID:PI1koV5V0
これは絶対にこうだって話でも何でもなく、おおよそこれまでの経験に基づく好みの方がデカいと思うけど。
>>693の実際のコードや運用保守まで知り得ないから、絶対こうだと第三者が結論づけるのはナンセンスだと思う。

自分は実際にこのようなケース(Cで)楽にメンテできた実績があるからこっちを選ぶけど、
こういう方法もあるよってディスカッションならどんどんやればいい。
0709デフォルトの名無しさん (スププ Sdbf-4Fgi)
垢版 |
2018/09/27(木) 14:09:57.57ID:7B8reSZgd
今更include_onceなんかを使ってるしむしろ693より悪化してるという
699みたいに動作定義を配列変数にしておけばその中に更に変数やメソッドの返り値を持たせることだってできるだろうに
0713デフォルトの名無しさん (ワッチョイ bfd5-E/Y9)
垢版 |
2018/09/27(木) 14:28:22.94ID:mllxUQ0M0
>>712
>>699 は $methodArr が hoge のスコープに居るからパラメタに変数を取ってもシンプルに定義できるけど、それを定義として別ファイルに浮かせるという話について、どうやって?と聞いてるだけだぞ。
おまえは具体的な実装イメージ湧いてる?
0714デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/28(金) 10:46:28.24ID:Lkb4ZCCn0
if ( ( string ) filter_input ( INPUT_POST , 'hoge' ) === '' ) { ・・・ }
↑だと入力欄が空の時に〜となりますが、
半角・全角のスペースが1つだけ入力されたの時も含めたい場合は どのように書くのが良いですか?
どなたか ご教授ください(´・ω・`)
0716デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
垢版 |
2018/09/28(金) 14:07:08.20ID:c+sKNdIa0
>>714
本当に半角スペースと全角スペースだけでいいの?
タブ"\t"とか改行コード"\rや\n"とかはOKなの?(たぶん駄目だよね)
本当に1つだけでいいの?
半角スペースが100個連続しているのはOKなの?(たぶん駄目だよね)

ってことで
UTF-8ならpreg_match()にuのパターン修飾子付けるのが楽

$hoge = (string) filter_input(INPUT_POST, 'hoge');
if ($hoge === '' || preg_match('/\A\s++\z/u', $hoge)) { }

もっと厳密にやりたいなら、弾きたい文字を文字プロパティで表現すればいい
例えば [\p{Z}\p{Cc}]++ みたいに
0717デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
垢版 |
2018/09/28(金) 14:08:24.39ID:c+sKNdIa0
で、更に言えばさw
'あいうえお'の前後に空白文字が1000個あるのはOKなの?って話にもなってくるんで
ちょいと考え方と変えて

$hoge = preg_replace('/\A\s++|\s++\z/u', '', $hoge);
こんな感じで先に文字列の前後の空白文字を取り除いてから

if ($hoge === '') { }
とするやり方なんかもあるな
0719デフォルトの名無しさん (ワッチョイ f7e9-S4i9)
垢版 |
2018/09/28(金) 14:29:52.16ID:c+sKNdIa0
>>718
空の時点で評価して正規表現に通さない方がいいから

だから本当に質問の通りでいいなら
if ($hoge === '' || $hoge === ' ' || $hoge === ' ')
で別にいいw

あと+じゃなく++と書いてる理由はReDoSでググればいいんじゃない?
Stack Exchange(違ったかもw)が
++じゃなく+使ってたせいでサービスダウンしたのはわりと有名
0720デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/28(金) 15:56:20.55ID:Lkb4ZCCn0
>>715
アドバイスありがとうございます。
filter_inputのマニュアルを確認しましたが、自分では解決できませんでした。
引き続き学習を続けます。

>>716
アドバイスありがとうございます。
ご指摘の通り課題が山積みです。
いただいたレスを参考にします。

お二方、ありがとうございました。
0722デフォルトの名無しさん (ワッチョイ 378a-tkB1)
垢版 |
2018/09/29(土) 10:56:37.08ID:6BMpRid40
if('aaa'==' aaa')//true
となることを発見したんですが、前方の空白は無視されるんですか?
これは正しい使い方でいいのですか?
よろしくお願いします
0723720 (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/29(土) 17:12:36.46ID:rR859Rl80
>>720です

>>721さん
詳しく教えてくださり、ありがとうございます。
いただいたアドバイスを生かせるよう精進します。
0725デフォルトの名無しさん (ワッチョイ ff8a-tkB1)
垢版 |
2018/09/30(日) 08:27:28.94ID:KcrMzjy/0
>>724
すみません、間違えました
アルファベットaaaじゃなくて、数字1234でした
var_dump('1234'==' 1234');//bool(true)
0726デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/09/30(日) 13:45:51.83ID:Cu2FNSd00
メール送信の際に確認と検証目的で画面上に表示させる時、気をつけるべきことって どのくらいあるものなのだろうか(´・ω・`)
htmlspecialchars() ? 未入力の確認 ? (´ρ`)
0728デフォルトの名無しさん (ワッチョイ 57b8-UjLZ)
垢版 |
2018/09/30(日) 18:40:30.48ID:0JTA57Qc0
>>725
http://php.net/manual/ja/language.operators.comparison.php
>整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。

要は文字列'1234'が数値形式(int型)なので↓のように比較される。
(int)'1234' == (int)' 1234'

> === あるいは !== による比較では型変換は発生しません。 この場合は値だけでなく型も比較します。
なのでこういう自動キャストが困るのであれば===で比較すること。
0729デフォルトの名無しさん (ワッチョイ 178a-tkB1)
垢版 |
2018/10/01(月) 01:43:36.31ID:4WHq1Bue0
>>728
ありがとうございました
0730デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
垢版 |
2018/10/01(月) 15:22:45.32ID:EoUwSVMY0
すまない。
微妙にスレチなのだが助けてほしい。

端的に言うとXAMPPの処理中にブルー画面になり、MySQLが壊れて動かくなった。
コントロール画面でStartを押しても一瞬動いてすぐ止まる。
調べてみたところ復旧方法がない。
XAMPPを外付けに移し、再インストールはうまくできた。

問題はSQLのデータをどのように移し替えればいいのかわからない。
エクスポートはできておらず、移行の仕方がわからない。
mysqlのdataファイルにデータベースの情報があるのはわかったが、
ここままファイル移動させただけでは動かないのです。

移行方法をご存知の方いらっしゃいましたらお教えください。
0731デフォルトの名無しさん (ワッチョイ 9fd0-ZVm4)
垢版 |
2018/10/01(月) 16:08:39.48ID:dk4eIPju0
・echo htmlspecialchars($var = (string)filter_input(INPUT_POST,'var',ENT_QUOTES,'UTF-8'));
・echo $var = (string)filter_input(INPUT_POST,'var',FILTER_SANITIZE_FULL_SPECIAL_CHARS)
どっちが危険だと思う?
0734デフォルトの名無しさん (ワッチョイ 7f92-S4i9)
垢版 |
2018/10/01(月) 23:30:37.04ID:EoUwSVMY0
>>733

#1932 - Table 'rssurl.imglist' doesn't exist in engine
(訳)#1932 - テーブル 'rssurl.imglist'はエンジンに存在しません

というエラーが出ます。
phpMyAdminのデータベースのページにはrssurlがあるのですが、
テーブルのimglistをクリックすると上記のエラーが出ます。

「ibdata1」「ib_logfile0」「ib_logfile1」を書き直せばいいというとこまではわかったのですが、
やり方までは分かりませんでした。
古いファイルもdataファイル内のものしかありません。
0737デフォルトの名無しさん (ワッチョイ 7723-jO+J)
垢版 |
2018/10/02(火) 17:55:01.30ID:nFqAwCYR0
>>734
もうそこまで来たらバックアップ使って一から復旧した方が速い
まさかバックアップ取ってないとかないと思うが、もしそうなら諦めロン
次からは定期的に数世代分はバックアップ取るようにしなよ
■ このスレッドは過去ログ倉庫に格納されています

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