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

【PHP】ID出さんでも質問OKなスレ【初心者歓迎】2

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2009/09/10(木) 22:52:33ID:???
まず読む→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

姉妹スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/
0910nobodyさん2009/11/16(月) 12:41:25ID:???
>>908
構文チェックはphp -lでできる。
あとはerror_log等を見る。

デバッグという事なら、PDTなどのIDEを使い、ZendDebugger/xdebugなどで
リモートデバッグが行える。
0911nobodyさん2009/11/16(月) 13:18:43ID:???
またOCNとチンピラが沸いてたのか
0912nobodyさん2009/11/16(月) 13:25:41ID:???
>>910

すみません、php -l って、マイナスと小文字のエルですか?
どのように使うのでしょうか?
ググってみたのですが、また、マニュアルで検索してみたのですが、出てきませんでした
0913nobodyさん2009/11/16(月) 13:31:41ID:???
>>912
http://www.php.net/manual/ja/features.commandline.php
0914nobodyさん2009/11/16(月) 13:34:58ID:???
グーグルでもヒットするじゃん
http://www.google.co.jp/search?q=%22php+-l%22
0915nobodyさん2009/11/16(月) 14:13:08ID:???
>>913
ありがとうございます

>>914
ダブルクォーテーションを使って検索するのですね・・・
知りませんでした
そのまま検索したら、PHP自体のことしか出てこなくて・・・
ありがとうございます
0916nobodyさん2009/11/16(月) 16:16:17ID:???
プリペアドステートメントを使うだけでSQLインジェクション対策はばっちりなのでしょうか?
これだけでいいなら誰も被害に遭わないとですよね
09179162009/11/16(月) 16:16:48ID:???
不要な「と」が入ってしまった、どこかの方言みたい
0918nobodyさん2009/11/16(月) 17:23:01ID:???
>>916に便乗して聞きたいけど、
レコード数の少ないテーブルからSELECTで抽出するようなときも
プリペアドステートメントとかで対策する必要があるの?

危険なのは
UPDATE、INSERT、REPLACEとかでデータベースを書き換えるときや
認証でパスワードを扱うときぐらいかなって思ったんだけど。
0919nobodyさん2009/11/16(月) 17:28:29ID:???
えっ・・・?
0920nobodyさん2009/11/16(月) 17:32:13ID:???
>>918
「select * from hoge ; delete 〜」のようにセミコロンで区切られて
複数クエリ実行されたらどうするの?
0921nobodyさん2009/11/16(月) 17:35:58ID:???
>>920
どうやって実行されるの?
0922nobodyさん2009/11/16(月) 17:44:09ID:???
>>921
例えが悪かったな、すまん。
wikiのSQLインジェクションに書いてある例を使わせて貰うと

SELECT * FROM users WHERE name = '(入力値)';

というSQLがあったときに、入力値に "' OR 't' = 't" と入れると

SELECT * FROM users WHERE name = '' OR 't' = 't';
↑
こうなるとある。この場合は全件選択されるだけだが
ここで入力値を "' OR 't' = 't' ; delete from TABLE名; --"
とすると、delete文が実行されてしまう。
0923nobodyさん2009/11/16(月) 17:50:37ID:???
やっぱ皆さん、フレームワークは使っているのでしょうか?
PHP、PEAR、Smartyと学習してきましたが、フレームワークだけは何をやればいいのか分からなくて・・・

そもそも、どういうところで使用するのですか?
0924nobodyさん2009/11/16(月) 18:41:46ID:???
Webアプリでですが
09259182009/11/16(月) 20:49:30ID:???
>>920 >>922
つまり、SQL文にユーザの入力値が含まれてるような場合が危険ってことだよね?

入力値より前の部分がどんなSQL文になってるか、ユーザに知られちゃうことってあるの?
それとも当てずっぽうで攻撃する人がいるってこと?
0926nobodyさん2009/11/16(月) 20:51:21ID:???
はぁ・・・?
0927nobodyさん2009/11/16(月) 20:53:58ID:???
まぁあてずっぽうでもそれっぽいの入れてればそのうちあたるかもな
それっぽいのをブルートフォースであたれば寝て起きたらいくつかわかってるかもしれんな
SQL文の命令自体はもうきまってるわけだし。
0928nobodyさん2009/11/16(月) 21:12:08ID:???
>>922
PDOでプレースホルダを使ってるけど、

$q = $db->prepare("SELECT * FROM users WHERE name=:username);
$q->bindparam(":username", $_POST['username']);
$q->execute();

こんなんじゃダメ??

$q->bindparam(":username", mysql_real_escape_string($_POST['username']));

のようにエスケープ関数を使わなきゃダメなのかな?
0929nobodyさん2009/11/16(月) 21:23:30ID:???
何のためにPDO使ってんの?
0930nobodyさん2009/11/16(月) 21:26:43ID:???
>>929
だめ?
0931nobodyさん2009/11/16(月) 21:40:14ID:???
個人で使うならmysql_real_escape_stringで十分
0932nobodyさん2009/11/16(月) 21:44:02ID:???
>>930
問題ないよ
0933nobodyさん2009/11/16(月) 21:53:30ID:???
>>930
揚げ足取りはスルーするのがいいよ
0934nobodyさん2009/11/16(月) 21:56:03ID:???
>>930
ばんばん使うといいよ
0935nobodyさん2009/11/16(月) 23:04:29ID:???
ウェブサイトからメタタグを取得して、
"。" ごとに配列に入れたいのですがうまくいきません。
"、" で試したらうまくいったのですが、どうしてでしょうか。

$tags = get_meta_tags('http://sample.com');
$des = $tags['description'];
$arry = explode('。', $des);

0936nobodyさん2009/11/17(火) 00:03:52ID:???
メタタグ内に。がないんじゃない?
0937nobodyさん2009/11/17(火) 11:04:57ID:???
ページャーのクラスを自作してみましたが、
クラスは何年も前にC++でちょっと使った経験しかないので
扱い方が正しいのか不安です。

$p = new pager(引数いろいろ);
echo $p->linkhtml(),

こうすると他ページへのリンクが出て、そのリンクをクリックすると
「?page=10」のようなクエリ文字付きで同じスクリプトに飛びます。
そうすると、リンクをクリックする度に $p = new pager(...); で何度も
インスタンス化が繰り返されることになりますが、問題ないでしょうか?

また、C++ではオブジェクトが不要になったら自分で破棄していた
記憶がありますが、PHPではガベージコレクターが自動的に
破棄してくれるのでしょうか。
0938nobodyさん2009/11/17(火) 11:38:28ID:???
>>936
"。" は、あるんですが、できないんです。
0939nobodyさん2009/11/17(火) 11:53:59ID:???
>>937
スクリプトが終わると勝手にデストラクタが呼ばれるよ
09409352009/11/17(火) 11:55:07ID:???
解決しました。
テキストエディタでphpのソースファイルを開いてみたら、
エンコードがなんとかかんとかって言われて
なぜか、"。"の部分が "B" になってました。
"B" を "。" に直したら解決しました。

0941nobodyさん2009/11/17(火) 11:59:14ID:???
>>940
「。」 0x8142(sjis)
「B」 0x42

理由わかってないとまた同じ問題起こしちゃうかもよ。
0942nobodyさん2009/11/17(火) 12:20:57ID:???
>>939
やっぱりそうなんですか。

リンクを押して飛ぶときにスクリプトが終了してオブジェクトが破棄されて
リンク先で新たにオブジェクトが作成される
と考えれば、問題ないんでしょうか‥。
0943nobodyさん2009/11/17(火) 12:28:07ID:???
そうです
0944nobodyさん2009/11/17(火) 12:34:06ID:???
飛ぶ時にスクリプトが終了?
0945nobodyさん2009/11/17(火) 12:40:58ID:???
>>943
ありがとうございます。
安心しました。

>>944
クライアント−サーバ間でやり取りが終わった時ですかね。
失礼しました。
0946nobodyさん2009/11/17(火) 20:55:41ID:???
CakePHPに興味があるのですが、bakeって何ですか?
本屋でざっと読んだくらいでは理解が出来ませんでした
0947nobodyさん2009/11/17(火) 20:57:05ID:???
bakeっていうのはバカっていう意味だよ

bake=cakePHP初心者=cakePHPを覚える者=cakePHPも使えないバカ
0948nobodyさん2009/11/17(火) 21:42:08ID:???
cakeをbakeすんじゃね?
0949nobodyさん2009/11/17(火) 21:49:08ID:???
逆だろ
bakeをcakeにするんだろ
他の人が(スクリプトが勝手に)土台を作ってくれると思えばよい
あとは生クリーム塗ってデコレーションは自分でしてねと
0950nobodyさん2009/11/17(火) 21:55:50ID:???
>>946じゃないけど、cakephpって今や必須?
どういうものかもわかってないんだけど。

いまテキストエディタでベタ打ちしてるんだけど、cakephpだと何か楽になるの?
今までに作ったwebアプリをcakephpに対応させる(?)ことは可能なのかな。
0951nobodyさん2009/11/17(火) 21:56:34ID:???
フレームワークだよ
0952nobodyさん2009/11/17(火) 22:08:27ID:???
「フレームワーク」調べてみた。

> フレームワークは一言で表すと、「アプリケーションの土台」と言えます。データベースへの接続、
> 認証機構の実装、データの登録・編集・削除ページの作成など、どんなWebアプリケーションにも
> 必須の機能があります。これらの開発を毎回1から行うことは非常に効率が悪いことです。
> フレームワークはこれらの機能を一つにまとめ、その組み合わせ方も提供します。言わば、コードの
> 規格書とも言えるでしょう。
ttp://www.phppro.jp/article/framework/framework.php


DBへの接続や認証の実装よりも、「コードの規格書」を新たに覚えるほうが面倒なんだけどなぁ。
個人で自分用のものを開発してるだけだったらフレームワークとか使わなくてもいいかな。
0953nobodyさん2009/11/17(火) 22:15:59ID:???
好きにしなよ
0954nobodyさん2009/11/17(火) 22:24:03ID:???
好きにします><

たぶん近いうちに本を読んでみる。
0955nobodyさん2009/11/17(火) 22:40:34ID:???
>>937
クラスって使い方がわかんねぇや。
どういうときに使うんだ?
0956nobodyさん2009/11/17(火) 23:57:53ID:???
素人や見習い相手にカッコつけたいときに
0957nobodyさん2009/11/18(水) 00:43:46ID:???
クラスのコードだけ配布するのはやめてほしい
俺はExampleがほしいんだよ
0958nobodyさん2009/11/18(水) 00:44:25ID:???
配列にhtmlタグを追加していきたいんですけど
$url=$_GET['url'];
$tug = "<img src=\"".$url."\" width=\"300\" height=\"300\">";

$tug_array=array();
array_unshift($tug_array,$tug);
どこが悪いんですかね?それともarray_unshift($tug_array,$tug);なんて不可なんでしょうか?
0959nobodyさん2009/11/18(水) 00:56:01ID:???
>>958
どこも悪くないよ
そのあとにvar_dump($tug_array);って書いてみるといいよ
あと、特に意図がないならarray_unshiftなんて使わなくても配列の追加は
$tug_array[] = $tug;
とか
$tug_array[] = "<img src=\"".$url."\" width=\"300\" height=\"300\">";
なんかでできるよ
0960nobodyさん2009/11/18(水) 01:02:21ID:???
どうでもいいかもしれないけど、タグのスペルが・・・(ry
0961nobodyさん2009/11/18(水) 01:20:54ID:???
>>959
おお・・・なんと親切な。ありがとうございます。

>>960
素直にtagで良かったのか・・・恥
0962nobodyさん2009/11/18(水) 02:38:42ID:???
え・・・わざとじゃ・・・なかった・・・だと・・・!!
0963nobodyさん2009/11/18(水) 02:59:20ID:???
>>961
>素直にtagで良かったのか
俺ちょっと意味分からん
0964nobodyさん2009/11/18(水) 13:13:19ID:???
設置ぐらいしかでき無い素人なんだけどここで聞いていいのかな?
借りてたサーバーが閉鎖するから他のサーバーに移転作業中で
設置して何回かのエラーの後、前の通り動かすことはできたんだけど
PHPから生成されるファイルの所有者が「www」になって
インターネット上から直接ファイルにアクセスすると丸見えなんだけど、これをどうにか自分の権限にすることできない?
前のサーバーではどこ変更することなく自分のIDになってた。

変える部分はここら辺かなとはおもう
/*-- メインファイル作成 --*/
function make_file1($line, $num) {
$file = LOGDIR . $num . ".dat";
$fp = fopen($file, "w");
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
fputs($fp, $line);
fclose($fp);
chmod($file, 0666);
}
0965nobodyさん2009/11/18(水) 13:14:30ID:???

同時に生成されるこっちのファイルはちゃんと自分のIDになってる

/*-- カウントファイル作成 --*/
function make_file2($num) {
$file = LOGDIR . $num . "c.dat";
$line = "0<><>";
$fp = fopen($file, "w");
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
fputs($fp, $line);
fclose($fp);
# chmod($file, 0666);
}

PHPはレッツPHPのI-BOARDの改造版つかってます。
よろしくおねがいします。
0966nobodyさん2009/11/18(水) 13:40:45ID:???
明らかに違う点があるじゃないか
0967nobodyさん2009/11/18(水) 14:59:10ID:???
ここ?
$line = "0<><>";

カウントファイルのchmodはエラーが出たので自分でコメントアウトした
0968nobodyさん2009/11/18(水) 15:02:00ID:???
そうか
0969nobodyさん2009/11/18(水) 16:29:27ID:???
そうさ
0970nobodyさん2009/11/19(木) 14:45:12ID:q1nxRQc4
PHPって複数の変数に同時に代入できますか?
$hoge と $hoge1 に 4989 という数値を入れたい時に
$hoge = "4989";
$hoge1 = "4989";
としないといけないのですが複数を一気に入れることが出来れば教えてください。
0971nobodyさん2009/11/19(木) 14:50:41ID:???
>>970
$hoge = $hoge1 = "4989";
0972nobodyさん2009/11/19(木) 14:51:25ID:???
>>971
そういうやり方でよかったんですね。
ありがとうございます。
0973nobodyさん2009/11/19(木) 15:10:14ID:???
>>971
何そのセンスの無いきめえ書き方
0974nobodyさん2009/11/19(木) 15:13:07ID:???
他に書き方が・・・?
0975nobodyさん2009/11/19(木) 15:32:31ID:???
C++とかでも同じように記述するよねぇ
0976nobodyさん2009/11/19(木) 15:32:39ID:???
C言語では普通に使われる書き方だな。
あと、↓でも解説されてる。
http://php.net/manual/ja/language.expressions.php
>'$b = ($a = 5)' のように書くことは、 '$a = 5; $b = 5;' と書くのと 同様なのです。(セミコロンは、文の終わりを示します。)
>代入は、右から左へ実行されるため、'$b = $a = 5' と書くことも 可能です。
0977nobodyさん2009/11/19(木) 15:58:12ID:???
別に>>973馬鹿にするわけでも何でもないんだが
$a = $b = "1"以外に同時に代入する方法あれば知りたいな
0978nobodyさん2009/11/19(木) 16:24:29ID:nc7ESJS7
$a & $b = 1;
0979nobodyさん2009/11/19(木) 16:59:07ID:???
$_FILES['aaa']['error'] が空かどうかを判定するのってどうするんでしょうか?
0980nobodyさん2009/11/19(木) 17:07:26ID:???
is_null
0981nobodyさん2009/11/19(木) 18:40:59ID:???
list($a, $b)=array_pad(null, 4989, 2);//w

>>979
isset
0982nobodyさん2009/11/19(木) 18:44:46ID:???
array_pad(array(), 2, 4989)だな、ネタだからどうでもいいけど。
0983nobodyさん2009/11/19(木) 19:39:34ID:???
>>979
empty
0984nobodyさん2009/11/20(金) 10:45:33ID:???
error_log("1234", 3, "/var/log/1234");
で実行すると権限がないと怒られます。
sudoで権限の設定はしたのでsudoでやれば出来ると思いますが、
これをsudoでする場合はどう記述すればいいのでしょうか?
0985nobodyさん2009/11/20(金) 11:10:47ID:???
またおまえか
0986nobodyさん2009/11/20(金) 11:14:04ID:???
syslogのほうが便利
09879842009/11/20(金) 11:47:31ID:???
すまん
php分離してsudoからphp別ファイルで叩いて回避した
syslogも考えて見ます。
ありがとうございます。
0988nobodyさん2009/11/20(金) 11:59:12ID:???
そろそろ次スレ立てないとな・・・
0989nobodyさん2009/11/20(金) 12:13:31ID:???
俺立てられないからこんな感じで誰か新スレ立ててくだされ


【PHP】ID出さんでも質問OKなスレ【初心者可】3

ID出さなくても質問OKなスレです
初心者もいるので、そういう方には親切に答えてあげましょう
荒らしやあまりにも言葉使いの悪い人間は無視の方向で

PHP以外にもPEAR等のライブラリ、Smarty等のテンプレート、フレームワーク、PHPがらみのSQL等も可としますが、出来るだけ専門のスレで質問された方がいいと思います
また、出来るだけOS、PHPやApache等のバージョンも書いた方がいいと思います


◆前スレ
【PHP】ID出さんでも質問OKなスレ【初心者歓迎】2
http://pc11.2ch.net/test/read.cgi/php/1252590753/

その他、諸情報は >>2-10 辺りにて
0990nobodyさん2009/11/20(金) 13:02:55ID:???
自分で解決できなくて質問しにくるのはみんな初心者だと思うんだが・・・
0991nobodyさん2009/11/20(金) 13:38:00ID:???
idスレに統合でいいと思うんだが・・・
0992nobodyさん2009/11/20(金) 13:39:37ID:???
あっちは毎日暇人気違いが暴れとるぞw
0993nobodyさん2009/11/20(金) 13:42:16ID:???
統合はすべきでないと俺は思うけどね
どっちも見ていてちょっと気質が違うから
0994nobodyさん2009/11/20(金) 13:43:20ID:???
ここは元々IDを出さないで質問してくる奴らのために分離されたスレだから
0995nobodyさん2009/11/20(金) 13:51:52ID:???
>>990
そうとも限らない
0996nobodyさん2009/11/20(金) 13:56:33ID:???
>>995
初心者乙
0997nobodyさん2009/11/20(金) 14:00:55ID:???
>>996
本気で言ってるの?
0998nobodyさん2009/11/20(金) 14:07:08ID:???
新しいバグ発見とかでも初心者扱いかよw
0999nobodyさん2009/11/20(金) 14:08:24ID:???
経験者ほど知識の共有を大事にするもんだ
1000nobodyさん2009/11/20(金) 14:15:38ID:???
一応1000取っておくか
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。