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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/23(日) 20:00:03ID:???
PHPに関するくだらねぇ質問用スレです。
ここならお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
0486nobodyさん2006/07/31(月) 11:08:17ID:???
>>484-485
ローカルで色々と試してきました。
結果、noticeすら出なかった・・・。

error_reporting(E_ALL);
ini_set('display_errors',1);

としてあるのですが謎です。

文字が空である事と値がない事は違うという事ですね。
0487(^ω^)2006/07/31(月) 11:35:32ID:???
NULLを代入する方が速いはず。特にPHP 5.1.4以降なら。
0488nobodyさん2006/07/31(月) 11:41:45ID:???
やっぱり、ヌルヌルの方が挿れやすいですからね^^
0489nobodyさん2006/07/31(月) 11:42:04ID:CE9HBJM2
質問です。

$hoge = " 1 "; //" " . "1" . " " の3つに分割されるつもり
$array = explode(" ",$hoge);

とした場合、最初のスペースが分割文字として判定されずに、

array([0]=>" 1",[1]=>"")

となってしまい困っています。
これが"#"などなら意図したとおり動作するのは確認しているのですが、すでにデータを" "で作成しています。
どうすれば先頭の" "も分割文字として認識されるのでしょうか。
助言をよろしくお願いします。
0490nobodyさん2006/07/31(月) 11:44:52ID:???
区切り文字も分割文字として認識するのか?
それは上手なデザインと言えないような…
0491nobodyさん2006/07/31(月) 11:47:29ID:???
>>489
力技だけど $hoge の先頭に "#" なりを付加して explode にかけて
出来上がった $array[0] の 1 文字目を削除する、とか。
0492nobodyさん2006/07/31(月) 11:53:11ID:CE9HBJM2
>>491
ありがとうございます。
その手を試してみます。
0493nobodyさん2006/07/31(月) 12:10:29ID:???
>>486
さらに言うなら、文字が空、と、値が無い、と、変数自体が無い、はそれぞれ意味が違う。
0494nobodyさん2006/07/31(月) 12:20:44ID:???
>>493
0 と false も追加しといて
最初の頃それで苦労したorz
0495nobodyさん2006/07/31(月) 14:02:13ID:???
「推奨されていないから使わないようにすべき」
「セキュリティ上、好ましくない」
とか、とても便利な逃げ常套句ですね。
それとも、なんですか…
具体的な例を提示できないから、
まさかこんな事言ってるんじゃありませんよね?
0496nobodyさん2006/07/31(月) 14:05:45ID:???
>>495
何に対して言ってるのかを明確に。
0497nobodyさん2006/07/31(月) 14:11:06ID:???
xreaを使っているのですが、extract(〜)と書かなくても勝手に
extract したような動作になってるのは回避できますか・・・

?p=abc

がそのまま$p=abcになってしまっている・・・。
0498(^ω^)2006/07/31(月) 14:24:08ID:????2BP(223)
ヒント:register_globals
0499nobodyさん2006/07/31(月) 14:25:39ID:???
ttp://propanmode.net/
User Agentにシングルクオートを入れてアクセスすると…
0500nobodyさん2006/07/31(月) 14:37:43ID:???
>>499
SELECT * FROM user_mst WHERE user_id = '' or user_id <> '' AND pass = '' or pass <> '' AND user_state <> 'del'

こういうSQL文になるように フォームの maxlenght を削ってローカルに保存し送信したら
ログインできたお
0501nobodyさん2006/07/31(月) 14:42:04ID:???
>>499
Fatal error: ERR_DBCls_ExecQuery :
SELECT * FROM count_tmp WHERE user_agent = 'test'test' AND remote_addr = '' AND remote_host = ''
in /virtual/propan/public_html/common/dbcls.php on line 238

DBでアクセス解析してるんだろう
誰かDELETEのSQLでも投げてやれよ、ちゃんと権限設定してあって大丈夫かもしれんが
0502nobodyさん2006/07/31(月) 14:59:02ID:???
SQLインジェクションですな。
0503nobodyさん2006/07/31(月) 15:16:32ID:HekLsGeB
#include<stdio.h>

int main(void)
{
double pai = 3.141592;
double r;
double taiseki;
int h;

r = 10;
h = 12;
taiseki = 1 / 3 * pai * r * r * h;
printf("三角錐の体積 = %d\n",taiseki);

return 0;
}

ってどこがおかしい?
0504nobodyさん2006/07/31(月) 15:18:16ID:???
>>503
お前のレスしてる板
0505nonicebody2006/07/31(月) 15:22:45ID:???
>>503
>>504
久しぶりにわろたw
0506nobodyさん2006/07/31(月) 15:26:48ID:HekLsGeB
mgk
0507nobodyさん2006/07/31(月) 15:52:44ID:???
よくみたらCだな

#include<stdio.h>
が、なつかしー
0508nobodyさん2006/07/31(月) 15:53:15ID:HekLsGeB
頼む!
テスト中なんだ!
0509nobodyさん2006/07/31(月) 16:00:24ID:???
カンニングはいかんよ
0510nobodyさん2006/07/31(月) 16:02:22ID:???
こうなるのか?
三角錐の体積 = 0
0511nobodyさん2006/07/31(月) 16:04:11ID:HekLsGeB
そうそう。
持ち込み可だからパソコン使っても良いはず!
0512nobodyさん2006/07/31(月) 16:05:52ID:???
1/3=0
0513nobodyさん2006/07/31(月) 16:07:07ID:???
%f か
0514nobodyさん2006/07/31(月) 16:07:45ID:???
<?php
$pai = 3.141592;
$r = 10;
$h = 12;
$taiseki = 1 / 3 * $pai * $r * $h;
printf('三角錐の体積 = %d', $taiseki);
?>
0515nobodyさん2006/07/31(月) 16:07:46ID:???
頭痛が痛い
クーラー病にかかった
PHPで治すにはどうしたらよいですか?
0516nobodyさん2006/07/31(月) 16:12:18ID:???
頭痛が痛い
0517nobodyさん2006/07/31(月) 16:12:32ID:???
>>515
そと言って走って来い
0518nobodyさん2006/07/31(月) 16:13:35ID:???
>>515
無限ループさせて、ハードディスクの熱でぬくぬく!
0519nobodyさん2006/07/31(月) 16:15:00ID:???
>>517,518
解決しました
ありがとうございます
0520nobodyさん2006/07/31(月) 16:20:30ID:HekLsGeB
ひとつはfみたい。�dクス。他にないですか?
0521nobodyさん2006/07/31(月) 16:24:42ID:???
>>518
CPUだろ
0522nobodyさん2006/07/31(月) 16:28:21ID:HekLsGeB
オワタ。
楽しかった。ありがとう。
0523nobodyさん2006/07/31(月) 16:41:53ID:???
サイト内の共通する部分(ヘッダーメニューなど)を
PHPのinclude化したのですがwin IEだとインクルードした部分の
上にスペースができてしまいます。
しかし生成されたページのソースを表示してもなんらスペースができる
要因もないしインクルード処理をせずそのままページ上にhtmlを記述すると
スペースはできないのですが対処はあるのでしょうか?
0524nobodyさん2006/07/31(月) 16:46:21ID:???
IE改造
0525nobodyさん2006/07/31(月) 16:48:08ID:???
>>523
こないだの人?
前、なんて言われたか覚えてる?
0526nobodyさん2006/07/31(月) 16:50:23ID:???
>>156- と同じだね。
0527nobodyさん2006/07/31(月) 16:51:18ID:???
>>525
このあいだの人ではないとおもいます
0528nobodyさん2006/07/31(月) 16:52:35ID:???
>>523は、ソース上で改行があるのか、それとも表示上での改行(というか余白)なのかがわからない。
後者なら仕方無いだろ。

ユーザスタイルシートでマージン殺せ。
0529nobodyさん2006/07/31(月) 16:55:04ID:???
>>527
同一人物であろうがなかろうが、再現環境・スクリプトを提示しない限り
時間の無駄だからスルーの方向で
0530nobodyさん2006/07/31(月) 16:55:45ID:???
>>523
インクルードされるファイルの一番最後、
?>
の後に余計な改行が入ってる
0531nobodyさん2006/07/31(月) 16:58:47ID:???
間違いなく >>523 は画面上でのスペースのことを言っている。
要素のデフォルトマージンだろ。

Web板いけ。
05325232006/07/31(月) 17:06:52ID:???
>>156のとまったく同じ状況でした。
ちなみに答えは>>204の通りutf-8n保存で解決しました。
お騒がせスマソ
0533nobodyさん2006/07/31(月) 17:10:17ID:???
>>532 氏ね
0534nobodyさん2006/07/31(月) 17:14:02ID:???
<>
0535nobodyさん2006/07/31(月) 17:53:46ID:86BvdUEa
レスは検索してなかったみたいだけど、ちゃんと解決法も書いてるし、別にマナーも悪くないし、いいんじゃないか。
0536nobodyさん2006/07/31(月) 18:16:12ID:???
PHPって、空でないディレクトリの削除は自分で処理を書くしかないんですか?
再帰的にunlink-rmdirしていくのは、あまり本質ではないディレクトリ削除で
そこそこ行数が増えてしまうので、他の方法があれば是非ご教示ください
0537nobodyさん2006/07/31(月) 18:20:11ID:???
>>536
rm -Rf ./hoge/*\ rmdir ./hoge/
0538nobodyさん2006/07/31(月) 18:26:58ID:???
ちと、お聞きしたいのですが
例えばここWebプログラミング板の
subject.txt(http://pc8.2ch.net/php/subject.txt)を
file_existsで存在の確認をしようとしても
falseしか吐かないのですが、file関数で直接調べることは
不可能、というか許されてないのでしょうか?
0539nobodyさん2006/07/31(月) 18:35:52ID:???
>>537
シェル実行ということですか。
使われる対象が色々なOSである可能性があるので、ちょっと難しそうです。
0540nobodyさん2006/07/31(月) 18:44:08ID:???
>>536
>あまり本質ではないディレクトリ削除で
どういう意味だ?
0541nobodyさん2006/07/31(月) 18:45:29ID:???
>>540
ごめんなさい、深い意味はありませんが、
本来API1つで書けそうなコードに対して、再帰のための関数まで書かなければいけないのは
ちょっと嫌だなと思っただけです。

方法が無いならもちろん書きます
0542nobodyさん2006/07/31(月) 18:51:59ID:???
色んなOSならなおさらラッパー的な役割をしているPHPの関数を使うべきではないのだろうか。
0543(^ω^)2006/07/31(月) 18:56:33ID:????2BP(223)
ユーザーノートに10行ちょいの再帰コード乗ってるよ
0544nobodyさん2006/07/31(月) 18:57:27ID:???
ほかのwebサイトから取得したデータを
キャッシュする関数はありませんか?
0545nobodyさん2006/07/31(月) 19:04:07ID:???
>>542
とすると、やはりPHP関数で書くしかないんですね

>>543
ありがとうございます。それを使って書くことにします
0546nobodyさん2006/07/31(月) 19:14:27ID:63K97mub
質問お願いします。

アクセスログをDBに書いてるのですが
まれにへんなREFERERがきて

invalid byte sequence for encoding "UTF8"

というPostgreSQLのエラーがでます。
UTF-8には存在しない文字コードが含まれてるとのことなのですが
保存する前の文字列から
UTF8にありえない文字列を除去、または
他の文字列に変換するような便利な関数か方法はないでしょうか?
0547nobodyさん2006/07/31(月) 19:26:48ID:AsAaXYbZ
くだらない質問します。

mysqlのクエリをphpで書くときに、たとえば
$sql = "update hogetbl set hogehoge ='$hogehoge'";
といったように、クエリ中の変数をシングルクオートで囲むのは危険なのですか?
\"".$hogehoge."\"のように書けば問題ないでしょうか?
0548(^ω^)2006/07/31(月) 19:33:23ID:???
>>546
http://blog.ohgaki.net/index.php/yohgaki/2006/06/12/a_a_a_a_a_ra_ca_a_oa_pa_fa_ma_sa_sa_raf
を参考にどうぞ
>>547
$hogehogeが外部から来て検査していない変数ならどちらも危険
0549nobodyさん2006/07/31(月) 21:11:59ID:???
>>547
っていうか、その書き方だと$hogehogeは変数だとみなされず、
単なる文字列だと判断されるぞ。
0550nobodyさん2006/07/31(月) 21:16:44ID:???
>>549
んなこたぁない
05515462006/07/31(月) 21:55:58ID:???
>>548
ありがとうございます
encoding attackとみなすのはちょっとあれだったので
mb_convert_encoding($s, "UTF-8", "UTF-8")
をかますことにしました。
0552nobodyさん2006/07/31(月) 21:56:54ID:???
>>547
DBインターフェースを利用してバインドしろ
PEAR::DB の場合は
$result = $db->query("update hogetbl set hogehoge=?", array($hogehoge));

変数の値を自動的にquoteしてくれる
0553nobodyさん2006/07/31(月) 22:46:23ID:???
>>547
え。むしろシングルクオートの方が普通じゃないのか?
つか、危険云々はシングルだろうとダブルだろうと全然変わらんよ。
なんでそんなので危険率が変わると思ってるのか、それが気になる。
どっからそんな誤った知識を聞いてきたんだ。
0554nobodyさん2006/07/31(月) 23:25:37ID:WXdtFlcA
windowsXP PHP5.1.4です。

<FORM ACTION="form02.php" METHOD="POST">
<textarea name="honbun" rows="4" cols="40"></textarea><br>
<input type="submit" value="送信する"><input type="reset" value="リセット">
</FORM>

<?php

$honbun = $_POST["honbun"];

// ↓改行を正規表現で\nにして、それでarrayに入れたつもりになってる
$honbun = explode("\n",$honbun);

//そうしたら↓で上手くいくかなと思いましたがダメでした。
$gyo = count($honbun);
for($i=0; $i > $gyo; $i++) {
echo "$honbun[$gyo]"."<br>\n";}

改行の置き換え方がダメな気がするんですが
こういう場合、どうやってtextareaからの改行を
配列に振り分けたら良いんでしょうか...
0555nobodyさん2006/07/31(月) 23:32:15ID:???
$honbun = explode("\n",$honbun);
$honbun = explode("\r",$honbun);
$honbun = explode("\n\r",$honbun);


for($i=0; $i < $gyo; $i++)
05565542006/07/31(月) 23:41:01ID:???
ありがとうございます!
正規表現以前に、条件は$i < $gyo だし
arrayは$honbun[$i]ですね...orz
0557nobodyさん2006/07/31(月) 23:44:24ID:???
>>554
> $gyo = count($honbun);
> for($i=0; $i > $gyo; $i++) {

そのループ条件は $i < $gyo の間違いだと思う。
それじゃいきなり終わっちゃうから1行も表示されないだろうw
0558nobodyさん2006/07/31(月) 23:45:48ID:???
>>555
"\n\r"は"\r\n"じゃない?
あと、"\n"や"\r"でexplodeする前にまず"\r\n"でexplodeだと思う。
0559nobodyさん2006/07/31(月) 23:52:57ID:???
まずは改行コードの統一をしてから
\r\n→\n、\r→\n、\nでexplode
0560nobodyさん2006/08/01(火) 00:07:43ID:???
掲示板を触っているんですが、特定文字列を含む書き込みを弾くには
どのような関数を使えば良いでしょうか?
05615542006/08/01(火) 00:09:34ID:???
str_replace("\r\n","\n",$honbun);
str_replace("\r","\n",$honbun);

で統一してからexplodeするようにして、変数があべこべになってたのを
直したら無事動きました。
ありがとうございますm(_ _)m
0562nobodyさん2006/08/01(火) 00:13:37ID:???
str_replace(array("\r\n", "\r"), "\n", $honbun);で一発じゃないっけ?
0563nobodyさん2006/08/01(火) 00:39:18ID:???
>560
http://jp2.php.net/str_pos
0564nobodyさん2006/08/01(火) 01:02:56ID:rUBuvQ+2
スクリプトのデザインについて質問です。

データベース(MySQL)を使うのですが、ふつう、テーブルはあらかじめ
作成しておくべきなのでしょうか?
0565nobodyさん2006/08/01(火) 01:25:18ID:???
どっちでも良いんじゃない。
自分は最初に設計してるけど、大抵後から変更でてくる
0566nobodyさん2006/08/01(火) 01:44:57ID:???
>>564
スクリプトからのテーブル作成ってことなら普通しない。
0567nobodyさん2006/08/01(火) 02:26:07ID:???
変数が半角英数字かどうか調べるにはどうすれば良いのでしょうか?
0568nobodyさん2006/08/01(火) 02:39:57ID:s+Er9w14
$str = "hogehoge";
list($array[]) = split('',$str);
print_r($array);

文字を一文字ずつ区切ろうとしたのですが、
Warning: split() [function.split]: REG_EMPTY in
と出てうまくいきません。
一文字ずつ区切るのはできないのでしょうか?
0569nobodyさん2006/08/01(火) 02:45:07ID:s+Er9w14
str_splitで解決しました
0570nobodyさん2006/08/01(火) 03:43:57ID:???
>>567
そういう関数が用意されてるから調べてみるといいよ。
0571nobodyさん2006/08/01(火) 07:51:08ID:???
>>568
配列にしなくても$str{0}で"h"、$str{1}で"o"にアクセスできるけどね
0572nobodyさん2006/08/01(火) 10:23:16ID:oOf+GkNU
547です。
みなさんレスありがとうございます。

危険度という意味では大差ないということでOKでしょうか?
クエリ文のシングルクオートは危険というのを、どこかで聞きかじった気がしたので確認させて頂きたかったのです。ありがとうございました。
0573nobodyさん2006/08/01(火) 10:30:30ID:???
>>547
おいおい。結論がおかしい。
とにかく危険なのには変わりないんだから >>552 にあるような書き方に改めな。
0574nobodyさん2006/08/01(火) 10:39:34ID:???
>>572
シングルクォートであるとかないとかじゃなくて、
その変数をきちんとエスケープ関数に通したかどうかを気にしろ。
0575nobodyさん2006/08/01(火) 10:41:57ID:???
俺はシングルとダブルは使い分けている
エスケープ文字がうざいから
0576nobodyさん2006/08/01(火) 10:43:45ID:???
>>575
今はそういうことを言っているんじゃない。論点をずらすな。
関係ない戯言は他所で書け。
0577nobodyさん2006/08/01(火) 10:46:04ID:???
>>572
危険度は大差ないというか「どっちも危険」。
多分、聞きかじった内容を思いっきり勘違いしてる。
実際はクオートは関係なく、それ以外にもっと重要な要素が抜け落ちてる。
>>575
それはPHPのクオートの話であってMySQLのクオートとは別の話。
0578nobodyさん2006/08/01(火) 10:48:12ID:rUBuvQ+2
マニュアルにある

function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes ($value);
}

// 数値あるいは数値形式の文字列以外をクオートする
if (! is_numeric($value)) {
$value = "'" . mysql_real_escape_string ($value) . "'";
}
return $value;
}

これでいいじゃん?
0579nobodyさん2006/08/01(火) 10:49:19ID:rUBuvQ+2
>>565-566
意見ありがとうございました。
貝から操作してCREATE TABLEします・・・
0580nobodyさん2006/08/01(火) 10:57:59ID:???
>>578
magic_quote設定なんていちいち見ないなー。
汎用のライブラリ作るんならそこまでやってもいいと思うけど、普通の開発じゃ無駄じゃない?
素直に
"select * from table where col = '" . mysql_escape_string($value) . "'";
でいいじゃん。
0581nobodyさん2006/08/01(火) 10:59:17ID:???
>>580
いや、だから、bind とか prepared statement でいいじゃん。
0582nobodyさん2006/08/01(火) 11:02:44ID:???
>>581
ちょっとしたちっこいスクリプトにまでいちいちPEARいれてらんねー
0583nobodyさん2006/08/01(火) 11:07:43ID:???
>>582
俺もそう思う。
0584nobodyさん2006/08/01(火) 11:09:14ID:???
perl に比べれば入れるもの少ないのだから、そんなにめんどうだとは思わないけどな
0585nobodyさん2006/08/01(火) 11:15:42ID:???
プリペアドステートメントに渡したデータは自動的に引用符で括られるの知らんかった・・・

みんなPDOは使ってないの?
■ このスレッドは過去ログ倉庫に格納されています