トップページphp
1001コメント307KB

くだすれPHP(超初心者用)5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/11/22(土) 06:36:02ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
http://www.php.net/
http://jp.php.net/



くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0786nobodyさん2009/02/21(土) 11:20:40ID:???
すみませんが質問させてください。
入場者名と退場者名を同じ1ページ内で、上下のスパン(上半分が入場者名、下半分が退場者名)
にしてPDF出力したいと考えています。
プログラムはそれぞれ"nyuujyou.php"、"taijyou.php"が用意されています。
このように別々のプログラムの結果を、同じページ内でPDFで同時に表示させることはできますか?
共通の変数は日付$ymdだけです。
0787nobodyさん2009/02/21(土) 11:54:46ID:???
>786
入場.php、退場.phpを、出力結果をechoするのではなく、出力結果を文字列として返す関数に書き直すのが正しい道。
こういう事は非常によくあるので、「出力結果を組み立てる」部分と「書き出す」部分は明確に分けたほうがいい。
「入場者名や属性の配列をDBから取ってくる部分」→「それを使ってHTML文字列を組み立てる部分」→「それを受け取って書き出す部分」
の三段階に分けると使い回しが効く。ロジックの殆どは最初の部分に来て、変更が多いのは簡単な後半だからな。
例えばCSVでファイルに書き出したい場合、最初の難しい部分にはノータッチで後ろの2つだけ書き換えればよくなる。
前から順に「モデル」「ビュー」「コントロール(の一部だが)」層と呼ぶ。

で、レシピだが。
<?php
$ymd = '2009/02/21';
ob_start();
require_once("入場.php");
$result1 = ob_get_flush();

ob_start();
require_once("退場.php");
$result2 = ob_get_flush();

でresult1、$result2に両phpの実行結果が文字列として入る。PDF変換はライブラリを自分で漁れ。
07887862009/02/21(土) 11:59:35ID:???
>787
わかりました、丁寧にありがとうございました。
0789nobodyさん2009/02/21(土) 12:59:33ID:???
>>778
厳しいご意見どうも
前段に関してはセキュリティ関連のサイトとか見てるんで
scriptを仕込まれてとかはまあ理解してます(というかこんなことがあると把握してる程度というか)。
その上で>>772が全くの無駄となるとhtmlspecialcharsが意味を成さないんでしょうか
それとも関数の後に置換をしてるからダメになるんでしょうか。
これで100%対策してるとはもともと思ってませんが、htmlspecialcharsで
ある程度の対策になるという考えは間違ってるでしょうか。
>>772も置換パターンが読まれたらアウトですが、どういった部分がだめなのか1例だけでも
教えてもらえないでしょうか。
0790nobodyさん2009/02/21(土) 14:46:55ID:???
@<b onmouseover=@"怪しい処理@" @>ボールドだよ@</b@>

自信ないけど、こんなの入れたらどうなるでしょうか。
0791nobodyさん2009/02/21(土) 15:18:21ID:???
>>790
つまり789の最後に言ってるように@<が<に変換されるのが
ばれているということが前提ですか?
ならば置換を行わずにhtmlspecialcharsのみなら問題ないということでしょうか。
当初の一部タグを有効にしたいというのはとりあえず置いときますが。
0792nobodyさん2009/02/21(土) 15:38:10ID:???
>>791
一部のタグだけ有効にしたいというのならstrip_tagsでいいでしょ
0793nobodyさん2009/02/21(土) 15:51:07ID:???
出力時に htmlspecialchars を挟むのは間違えてない。
万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。
# まぁ、SQLインジェクションが起こった時点でいろいろ見直すべきだと思うけど。

装飾のタグが使えるのは素敵な機能だと思うけど、自力で組むのは難しいんじゃなかろうか。
自分ではどんなに完全だ、と思ってても意外なところに穴があったりするし。
ここで「大丈夫でしょうか?」って聞くくらいならば、そんなものは実装しないのが一番。
少なくとも str_replace() とかの単純な手法で実装できるような機能ではないと思う。

置換パターンが読まれてなければ云々については、
攻撃するときは攻撃者はいろんなパターンの文字列をスクリプトに投げてみて、置換や変換のルールを推測した上で攻撃するんだろうから、
あんまり考える意味がない。
0794nobodyさん2009/02/21(土) 15:54:51ID:???
strip_tags
ttp://phpspot.net/php/man/php/function.strip-tags.html

この関数は、allowable_tagsで許可した全てのタグ の属性を修整しません。
これには、style お よび onmouseover属性が含まれており、悪意のあるユーザが他のユーザに見せるようなテキストを投稿する際に危険な行為を行う可能性があります。
07957912009/02/21(土) 16:08:04ID:???
ありがとうございます。
ちょっと忙しくなったので夜に反応します。
0796nobodyさん2009/02/21(土) 19:23:46ID:???
>>783
設計はすでにできていてあとはコードを書くだけ?
それなら設計の読み方わかるニートがやってくれるかもね
普通の人に頼むならまぁ無理だと思ったほうがいいわ
時給換算して300行400円はわりにあわない
10分で300行かけるような超人がいたとしたら
人の○倍仕事量こなすから○倍よこせってなるのでますます無理
設計書くなら値段は跳ね上がるから設計書いらないっていうのが
PHPクライアントなわけだけど
それだとお金にならないからスルーするというのが業界の流れ
0797nobodyさん2009/02/21(土) 21:09:34ID:1h/i9qY8
これだと1回で20数全部でます。1回1数でかぶらずに20回出したいです。
<?php
$numbers = range(1, 20);
shuffle($numbers);
for($i = 0; $i < 20; $i++) {
echo $numbers[$i]."<br>\n";
}
?>
0798nobodyさん2009/02/21(土) 21:19:21ID:???
<?php
$CountLogFile = "カウントログへのファイルパスを指定";
session_save_path("セッション情報を記録するディレクトリパスを指定");

session_start();
if(!file_exists($CountLogFile))
{
touch($CountLogFile);
}
$File = fopen($CountLogFile , "r+" ) or exit("FileOpenError...");
flock($File , 2);
if(empty($_SESSION["Count"]))
{
$_SESSION["Count"] = "1";
$Count = fgets($File , 16);
$Count = $Count + $_SESSION["Count"];
}
else
{
$Count = fgets($File , 16);
}
rewind($File);
fwrite($File , $Count);
flock($File , 3);
fclose($File);
?>

<?php echo "AccessCount : $Count"; ?>
0799nobodyさん2009/02/21(土) 21:19:50ID:???
マルチは地獄に落ちろ
0800nobodyさん2009/02/21(土) 21:35:22ID:???
はわわ
08017722009/02/21(土) 21:58:27ID:???
strip_tagsは>>794なので自分で有効なタグのみ出力するよう考えてみたんですが難しいようですね。
wiki風なキーワード+対象文字っていうのも考えてたんですけど、それはそれで抜き出しのための正規表現とかで
>>793でも言われているどんな抜けがあるかが想像つかないものでして。
とりあえず今回はあきらめることにします。ありがとうございました。
0802nobodyさん2009/02/21(土) 22:35:15ID:???
>>794
万一、SQLインジェクションされて、不正なデータを注入されても htmlspecialchars が出力時に噛ませてあればほんの少しダメージを軽減できる。

お前、いろいろと混同してないか?
0803nobodyさん2009/02/21(土) 22:42:59ID:q8fBHhcW
test.html

<?php
if( $_POST['insert'] == 'insert' ) {
echo "インサート";
}
?>

・・・

<form action="test.html">
<input type="text" name="text">
<input type="submit" value="送信">
<input type="hidden" name="insert" value="insert">
</form>


送信を押したときにだけ、インサートを表示するようにしたいのですが、リロードした場合も表示されてしまいます。

POSTされた中身が保持されているからだと思うのですが、

送信を押したときにだけ表示するにはどうしたらよいでしょうか?
0804nobodyさん2009/02/21(土) 22:45:45ID:???
リロードした時に「再送信しますか?」って聞かれてるだろ?
つまり、そういう事だ。
0805nobodyさん2009/02/21(土) 23:01:17ID:???
>>802
不正に注入されたデータがJSとかのスクリプトを含むもので、html..を噛ませてなかったら、出力時に実行されてScriptInsertionにならない?
そこで、データの出力時にhtml..を噛ませてあれば、JSの実行は防げるから多少は軽減できる、って意味。
別にSQLInjectionが防げるっていう意味のつもりじゃないよ。
0806nobodyさん2009/02/21(土) 23:42:58ID:???
質問です。

file_get_contents()って第一引数にファイル名を指定しなければならないと聞きましたが、ファイル名を変数に代入してそれを指定しても動きますでしょうか?
0807nobodyさん2009/02/21(土) 23:48:15ID:???
動く
0808nobodyさん2009/02/22(日) 00:00:11ID:???
>>803
解決法のひとつは、getにする。
0809nobodyさん2009/02/22(日) 00:11:37ID:???
>>805
いやそこでSQLインジェクションが出てくるのがおかしいよ。
意図したとおりのSQLが実行されて、意図したとおりDBに保存されるんでしょ?

文字型のカラムに入るデータがHTMLだろうとJavaScriptだろうと
DB的にはなにも問題ない。

それを取り出して表示するときにHTMLならHTML用の処理が必要ってこと。


。。。ほかのとこにいた人?
0810nobodyさん2009/02/22(日) 00:15:33ID:???
>>803
二重送信防止とかでぐぐれば結構出てくるよ
0811nobodyさん2009/02/22(日) 00:23:28ID:???
>>809
インジェクションが万一、起こってしまった場合の話。
html..が対策になるなんて思ってないよ。

データベースから引っ張ったデータでも信用せずに、出力時にhtml..をかけておけば万が一、JSとかの意図しないデータを混入させられても少しは安全になるだろう。

って言いたかった。
間違えたこと言ってたらすまない。
08128112009/02/22(日) 00:34:57ID:???
なんかわかりにくくなってる。

言いたいことは>>809と同じのつもりなんだけど……。
ぐちゃぐちゃにしてしまった、申し訳ない。

IDスレのほうも似た話題になってるけど別の人です。
失礼しました。
0813nobodyさん2009/02/22(日) 00:39:28ID:???
むしろ809が何に食いついてるのかがわからん
俺に読解力がないんだろうか
0814nobodyさん2009/02/22(日) 00:43:08ID:???
質問です。
配列の値をカンマで繋げたいんですがそういった関数はないでしょうか。
配列関数のところにはなさそうなんですがforeachでループさせるぐらいしかないんでしょうか。
0815nobodyさん2009/02/22(日) 01:09:34ID:???
implode
0816nobodyさん2009/02/22(日) 01:23:04ID:???
implode,explodeは覚えておいて損はない
0817nobodyさん2009/02/22(日) 01:23:45ID:???
>>815
ああstring関数でしたか。
ありがとうございます。
0818nobodyさん2009/02/22(日) 01:28:17ID:???
>>816
はい、しかと覚えました。

ていうか今回はこちらの調べ方不足だったけど
関数多すぎでいまいちマニュアルから探しづらい・・・
0819nobodyさん2009/02/22(日) 01:32:17ID:???
何でも自分以外の物のせいにする奴は駄目な子になるぞ
0820nobodyさん2009/02/22(日) 01:37:18ID:???
>>818
「php 関数 配列 つなげる」でぐぐったらすぐ出てきたぞ
0821nobodyさん2009/02/22(日) 01:50:01ID:???
キーワード
php 配列 値 繋げる

今回は悪かったって
たいていググルで見つかるけどマニュアル内検索でヒットしたらいいんだけどね
とまた転嫁
0822nobodyさん2009/02/22(日) 02:26:36ID:???
PHPの関数は6500個あるから
マニュアル全部読みとか無理
0823nobodyさん2009/02/22(日) 02:57:10ID:???
>>822
6500とかすげーなw
数えたお前もすげーよ
0824nobodyさん2009/02/22(日) 10:23:10ID:???
>>804
>>808
>>810
ありがとうございます。参考にさせていただきます。
0825nobodyさん2009/02/22(日) 10:31:23ID:???
phpのレンタルサーバでオススメなところはどこですか?
私は、今のところサクラを考えていますが既に使われている方は
実際の使い勝手は如何でしょうか?

選択する上でのポイント
・月額料金が1000円未満
・ローカルで作成したphpスクリプト+DB(MySQL)を簡単に使える(UI操作でOK)
0826nobodyさん2009/02/22(日) 10:32:38ID:???
http://pc11.2ch.net/hosting/

板違い
0827nobodyさん2009/02/22(日) 15:33:49ID:???
最近引き継いだ案件のソースみたら、
PDOもPEARもmysqliも使ってなくて、
いまだにmysql関数使っててマイッタ。
インジェクションはエスケープ文字をあらかじめ
全部全角に変換することで対応してるみたい。
これってどうよ?
0828nobodyさん2009/02/22(日) 16:01:03ID:???
トリッキーな解決は風物詩
0829nobodyさん2009/02/22(日) 16:06:55ID:???
おれもmysql関数しか使わないよ
どんな環境・設定でも対応できるからネイティブ関数だけで使いやすいようにクラス化しておけば使いやすいし
0830nobodyさん2009/02/22(日) 16:14:47ID:???
>>829
やっぱそういうことか。
たしかにどネイティブだからサクサク動いてるんだよな〜これが。
デグレ起こしたらいやだし、今回は実装あわせてサクッと終わらせよ。
0831nobodyさん2009/02/22(日) 16:47:38ID:???
Vistaにapacheをインストールしたのですが、
起動しようとすると、
「指定されたファイルが見つかりません。No Installed service named "Apache2"」
となって起動できませんでした。

UACはオフにしているのですが…、どなたか教えて下さい。
0832nobodyさん2009/02/22(日) 16:57:39ID:???
IISとかSKYPEが起動してないか要チェックですぞ
0833nobodyさん2009/02/22(日) 16:58:16ID:???

PCにキックをすると直ったよ。
0834nobodyさん2009/02/22(日) 17:15:38ID:???
>>832
あ!skype起動してました!これオフラインにすると正常にインストールすることができるんですかね?
あとIISってのが分らないです。調べてみます…
0835nobodyさん2009/02/22(日) 17:32:49ID:???
ポート80の取り合いするからだよ
0836nobodyさん2009/02/22(日) 17:34:31ID:???
できました!skype閉じてインストーラ起動させてみたら正常にインストールできました。
皆さんのおかげです。ありがとうございました!
0837nobodyさん2009/02/22(日) 17:39:03ID:???
青いねぇ!すがすがしい!
0838nobodyさん2009/02/22(日) 17:54:25ID:???
PHPを拡張しようと思ってhttpdのAddModuleという欄をさがしてみたのですがありません。
apacheのバージョンは2.0、PHPのバージョンは5なんですが2.0には最初から書いてないんですかね?
0839nobodyさん2009/02/22(日) 18:06:50ID:???
LoadModule書けばよし
0840nobodyさん2009/02/22(日) 18:10:00ID:???
お!そうなんですか! じゃあAddModule mod_php4.cの記述はいらないってことですかね?
0841nobodyさん2009/02/22(日) 18:11:04ID:???
そらそうだ。
エスパーじゃないんだから、チミがAddModuleするかなんて
アパッチ様が知るわけないだろ
0842nobodyさん2009/02/22(日) 18:13:45ID:???
エスパーじゃない...そうですね!
アパッチ様がエスパーじゃないという前提で、LoadModule mod_php5.cと記述してみました。これで合ってるでしょうか
0843nobodyさん2009/02/22(日) 18:29:41ID:???
それじゃぁエスパーだという前提じゃないと動かないと思うぞ
0844nobodyさん2009/02/22(日) 18:31:48ID:???
えー!どうしましょう!じゃあもうコレ

AddModule mod_php5.c
いらないってことですかね?
08458382009/02/22(日) 23:02:42ID:???
もう!オレのバカバカ!こんな質問でみんなを困らせて!
みなさんありがとうございました。自分で解決してみます
0846nobodyさん2009/02/23(月) 01:21:02ID:???
>>803
value をからにしておいて、ボタン押したら
document.forms[0].elements['insert'].value = 'insert';
document.forms[0].submit(); とか、phpじゃないけど、、
0847nobodyさん2009/02/23(月) 09:53:42ID:???
これからPHPを1から勉強しようと思っています。
初心者用でおすすめの技術書はありますか?
できれば1行ごとに、「//変数を配列[a]にセットする」・・などといった解説がついているといいのですが。
おねがいします。
0848nobodyさん2009/02/23(月) 12:40:12ID:???
マニュアル
0849nobodyさん2009/02/23(月) 12:52:59ID:???
その段階ならマニュアルの言語リファレンス読んだほうがいいと思われ
0850nobodyさん2009/02/23(月) 14:11:13ID:???
PHPをイチからっつても、下地があるかどうかで変わってくると思うけど・・・
なんか他の言語でプログラムはしたことあるの?
0851nobodyさん2009/02/23(月) 15:26:41ID:???
PHPでfeedcreator.class.phpを使ってRSS出力をしています。
RSSのURLをIEでクリックすると、ちゃんとitemsを拾ってXMLにしてくれるんですけど、
RSSリーダーやFirefoxでクリックするとitemsを拾ってくれません<items>要素が空になってます。
IEとFirefoxでは挙動が違うのでしょうか?
0852nobodyさん2009/02/23(月) 15:39:23ID:???
↑の者です。
原因がわかりました。お騒がせしました。こちらのプログラム上のミスでした。
0853nobodyさん2009/02/23(月) 16:06:29ID:???
>>847
実践マスターPHP+MySQL

独習PHP

PHPによるWebアプリケーションスーパーサンプル
0854nobodyさん2009/02/23(月) 16:23:08ID:frx8oxrA
初心者ってレベルじゃないですがPHP+Apacheの最新版のインストール手順が載ってるサイト
ってありますか?
どこ調べても旧バージョンしかないんですが。
0855nobodyさん2009/02/23(月) 16:25:24ID:???
ここは超初心者用だから問題ないですよ。
0856nobodyさん2009/02/23(月) 16:34:11ID:???
>>855
それはありがたいです><もし心当たりのあるサイトがあれば教えてください
0857nobodyさん2009/02/23(月) 16:51:00ID:???
環境は?OSとか。
インストールはバイナリーから?ソースからビルド?
旧と手順変わらないと思うけどね。確実なのは添付されてるドキュメント
0858nobodyさん2009/02/23(月) 16:55:07ID:???
>>854
OSぐらい書いといた方がいいと思うよ。
WindowsとLinixがやり方違うし。

最新版は
Apache: 2.2系
PHP : 5.2.8

でおk?
0859nobodyさん2009/02/23(月) 17:49:03ID:frx8oxrA
>>858
そうです。OSはウィンドウズです。
0860nobodyさん2009/02/23(月) 17:52:48ID:???
>>857
よくわかりませんが多分前者かと
0861nobodyさん2009/02/23(月) 17:56:31ID:???
運用でなく開発環境として+インストールの勉強自体が目的じゃないなら
XAMPP入れた方が早いよ >>windows
0862nobodyさん2009/02/23(月) 18:01:35ID:???
>>848>>849>>850
まったく経験なしに等しいです。
>>853
ありがとうございます。とりあえずXAMPPはインストールしました
0863nobodyさん2009/02/23(月) 18:05:24ID:frx8oxrA
XAMPPってすごいですね。私は学習用に必要なんでこれを使わせていただきます。
ありがとうございました。
0864nobodyさん2009/02/23(月) 19:28:01ID:???
XAMPPのよさがまったくわからない。
0865nobodyさん2009/02/23(月) 19:39:11ID:???
>>854
xampp
0866nobodyさん2009/02/23(月) 19:40:36ID:???
>>864
じゃあ秋葉原にいくな

CPUを買うときと、ハードディスクを買うときと、
ソフトを買うときと、マウスを買うときと、
それぞれ全部違う町にいけ。
0867nobodyさん2009/02/23(月) 19:57:12ID:???
それは大げさ
0868nobodyさん2009/02/23(月) 21:15:50ID:???
>>867
いや、そんなもん
わざわざ面倒な方を選んで何が楽しいんだろうね
0869nobodyさん2009/02/23(月) 21:18:58ID:???
じゃあなんでwampじゃなくてxamppなんだ
0870nobodyさん2009/02/23(月) 21:38:57ID:???
いいんじゃない?自分が使ってるWeb鯖やアプリ鯖の設定について何も知らんでプログラミングしたいならそれで。

八割がた後になってハマるんだがw

必要になったらそのとき勉強する?はいはい。
0871nobodyさん2009/02/23(月) 21:41:24ID:???
まったくだ。
どんだけものぐさなんだよ。
0872nobodyさん2009/02/23(月) 21:52:11ID:???
>>870
馬鹿か?
駄目なやつは何を使っても駄目
ようは使う人の問題だろ

それにXAMPPは何も設定できないと思ってんのか?これだから低脳は
0873nobodyさん2009/02/23(月) 21:53:30ID:???
うんお前を見てよく分かるよ
0874nobodyさん2009/02/24(火) 09:21:59ID:???
http://anond.hatelabo.jp/20090222100251
ちょっと違うけどxamppにも当てはまる話
0875nobodyさん2009/02/25(水) 10:09:48ID:???
>>866
おまえはそれらを買う時に、常に全部一緒に買えよな。
0876nobodyさん2009/02/25(水) 22:54:22ID:???
既存のPCいじるときには一緒に買ったりはしないが、新しいPCを作る時は一緒に買うわな。
勿論、「ディスプレイとマウスは既存のものを使いまわすから要らないや」という事はあるが、全部必要な事のほうが世間的には圧倒的に多い。
マウスだけ使いまわすなら、ワンセット買って来てマウスだけ取り替えた方が楽だしな。

つうか、むしろBTOに近い気がする。
組み立てが面倒なので、多少コストで損をする事を承知でDellに頼むわけだ。
1台だけなら自作するだろうが、100台必要だと分かっているなら自作する馬鹿はいない。
webフレームワークは10台くらいの、自分でやるか頼むかちょっと迷うなってラインか。
0877nobodyさん2009/02/25(水) 22:59:00ID:???
あれ、いつの間にかフレームワークの話に逸れた。何故だろう自分でも分からない。
後半は思いっきり忘れてくれ。

とりあえず、初心者に買わせるならメーカー品にするだろ?って話。
0878nobodyさん2009/02/26(木) 10:25:39ID:???
全てソースから自分でオプション決めてビルドしてインストールするから
xamppなんて思いつきもしないな。
初心者ならそれから始めてもいいけど、何かあった時に誰かに聞くしか能がないから
決まった使い方しかできないみたいだな。
0879nobodyさん2009/02/26(木) 11:47:43ID:???
最近PHPスキル伸び悩んでるんだけど、
クラスやった事ないのでやったらいいですかね?
PHPマスターはオブジェクト指向ですか?
0880nobodyさん2009/02/26(木) 11:55:18ID:???
伸び悩んでるっていうかそれって皆無じゃん
0881nobodyさん2009/02/26(木) 12:05:11ID:???
PHPってオブジェクト指向になったんだろ?5から。
オレもまだ4ばかり使ってるけど、クラスはボチボチ使い始めてる。
0882nobodyさん2009/02/26(木) 12:13:19ID:???
オブジェクトなにがしがよりよい制作手法ならやればいいさ
よりよい制作手法を実現するための手段ならこだわる必要ない
0883nobodyさん2009/02/26(木) 13:02:56ID:???
>>879
データベースは使えるの?
オブジェクト指向はPHPで最初にやるべきではない。
不完全なPHPで最初にやると、
PHPが一般的で他の言語は特殊だという間違った認識が身につくよ。
用語なんかも一般的な他言語のものとは意味あいが違ったりするし。
0884nobodyさん2009/02/26(木) 13:18:41ID:???
>>883
例えば?
0885nobodyさん2009/02/26(木) 14:19:48ID:???
postgreです。
CSSなども基本的は事はOK
オブジェクト思考自体初めてなので>>883な言った様な
偏った認識もしたくはないですが、PHPのオブジェクト指向ができれば
他の言語もとっつきやすいですよね?
■ このスレッドは過去ログ倉庫に格納されています