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

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

■ このスレッドは過去ログ倉庫に格納されています
00019092006/06/23(金) 01:59:03ID:lPdqGX0Z
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

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

過去スレは>>2
0577nobodyさん2006/07/01(土) 21:09:54ID:???
>>576
スネーク、問題はPHP以前のところにあるようだ。このままでは板違いになってしまうぞ。
早急にHTMLをしっかり勉強し直してPHPに関する質問に切り替えるんだ。
05785592006/07/01(土) 21:24:54ID:???
>>567
誰かXREAでアカウント持ってる人、実験してみてもらえませんかね??
ちなみに他の鯖(XREA以外)で同じスクリプトを走らせたところ、
当然ながら問題なくリモートアドレスを取得できました。
0579nobodyさん2006/07/01(土) 21:39:45ID:???
>>576
phpだけでやれば?
0580nobodyさん2006/07/01(土) 21:47:19ID:???
>>578
ちったぁ検索したか?
餅は餅屋。XREA のことは XREA に聞け。
http://sb.xrea.com/showthread.php?threadid=6646

ちなみに、手元で phpinfo() を表示させてみたら REMOTE_ADDR は
グローバル IP アドレスが入ってたよ? http の場合ね。https は未確認。
0581nobodyさん2006/07/01(土) 21:49:59ID:???
>>580 の追記。
https だったらプライベート IP アドレスでした。
これで納得かい?
0582nobodyさん2006/07/01(土) 22:05:11ID:???
$_SERVER["REMOTE_HOST"]
は空みたい。
0583nobodyさん2006/07/01(土) 22:07:41ID:???
gethostbyaddr($_SERVER['REMOTE_ADDR']は?
0584nobodyさん2006/07/01(土) 22:33:18ID:???
$_SERVER["SERVER_ADDR"],
$_SERVER["REMOTE_ADDR"],
$_SERVER["REMOTE_HOST"],
getenv("REMOTE_ADDR"),
gethostbyaddr($_SERVER["REMOTE_ADDR"])
で
$_SERVER["REMOTE_HOST"]
以外は期待通りの動作

>>559か使ってるサーバ固有の問題
0585nobodyさん2006/07/01(土) 23:01:00ID:???
>>584
> $_SERVER["REMOTE_HOST"]
> 以外は期待通りの動作
期待通りも何も、REMOTE_HOST は必ずしもセットされるとは限らないから
別に期待通りじゃない、とは思わない。
負荷軽減のために逆引きしてないサーバは腐るほどある。
REMOTE_HOST が未定義だったら REMOTE_ADDR を resolve するのは
ネットワークプログラミングでは基本ですが?
0586nobodyさん2006/07/01(土) 23:19:21ID:???
なんで俺が揚げ足とられてんの??
0587nobodyさん2006/07/01(土) 23:19:58ID:???
ループ処理で配列に要素を追加しているのですが、希望通りの動作をしません。

具体的には、array('key1' => 'value1', 'key2' => 'value2') という配列を作成したいのですが、
array(array('key1' => 'value1'), array('key2' => 'value2')) という配列になってしまいます。

追加処理はこんな感じです。
for ($i = 0;$i < $count;$i++) {
$add[] = array("key{$i}" => "value{$i}");
}

よろしくお願いします。
0588nobodyさん2006/07/01(土) 23:20:01ID:???
http://example.com/
と書かれたときに、これにそのURLのリンクを貼りたいのですが、
どのようにすれば良いのでしょうか?
0589nobodyさん2006/07/01(土) 23:21:50ID:???
>>589
通過処理どおりの動作をしているようにみえるが
0590nobodyさん2006/07/01(土) 23:23:05ID:???
>>587
お前はわざとやってるのか?

add["key{$i}"] = "value{$i}";

だろうが。
0591nobodyさん2006/07/01(土) 23:24:14ID:???
$add["key{$i}"] = "value{$i}";  な
0592nobodyさん2006/07/01(土) 23:25:11ID:???
>>588
/(^|[^=;])(https?:\/\/[!#\$%&'()*+,\-.\/:;=\?@_~\w]+)/
0593nobodyさん2006/07/01(土) 23:26:16ID:???
訂正
(https?:\/\/[!#\$%&'()*+,\-.\/:;=\?@_~\w]+)
0594nobodyさん2006/07/01(土) 23:30:40ID:???
preg_replace("/(http\:\/\/[\w\.\~\-\/\?\&\=\;\#\:\%]+)/",
         "<a href=\"\\1\" target=\"_blank\">\\1</a>", $url)
0595nobodyさん2006/07/01(土) 23:34:57ID:???
>>588

if ($url == "http://example.com/";){
  echo "<a href=\"http://example.com/\">http://example.com/<;/a>";
}
0596nobodyさん2006/07/01(土) 23:36:09ID:???
>>590-591
紙紙紙紙!!!11

だいちゅき
0597nobodyさん2006/07/01(土) 23:38:03ID:???
>>596
はぁ?これくらいはできて平民なんだよ。
0598nobodyさん2006/07/01(土) 23:40:12ID:???
>>592-294

arigatougozaimasu
0599nobodyさん2006/07/01(土) 23:51:18ID:???
>>598
こいつ、かわいいなぁ
0600nobodyさん2006/07/02(日) 00:41:34ID:oZjla2sM
txtファイルの空行を探して削除したいのですが
どうすればいいのでしょうか
0601nobodyさん2006/07/02(日) 00:48:12ID:???
ループとかでチェックしていくしかないんじゃ?
知らないけど。
0602nobodyさん2006/07/02(日) 00:53:26ID:???
>>595

if ($url == "http://example.com/";){
  echo '<a href='.$url.'>'.$url.'</a>';
}
0603nobodyさん2006/07/02(日) 00:56:33ID:???
>>600
正規表現で改行が2個以上連続してるのを見つけ出してジェノサイド。
0604nobodyさん2006/07/02(日) 01:02:19ID:???
文字列から@〜@でくくられている部分を探して、@〜@の「〜」の部分.gifに置き換えたいのですが
どのようにすれば良いのでしょうか?

@a@⇒<img src=a.gif>
@phpkamo@⇒<img src=phpkamo.gif>
0605nobodyさん2006/07/02(日) 01:09:46ID:???
preg_replace('/\@([a-zA-Z0-9\-_~]*)?\@/', '<img src="$1.gif">', $str);
0606nobodyさん2006/07/02(日) 01:18:43ID:oZjla2sM
>>603

正規表現で改行2個は

ereg("^$", $var)

でよいでしょうか。
0607nobodyさん2006/07/02(日) 01:22:56ID:W09rfuPj
$_FILESでファイルのアップロード処理をしているのですが、ファイルタイプを調べてセキュリティ上危険だと
考えられるファイル(例えばCGI)の拡張子を「txt」にしたいと思います。

アップロードするファイルの種類を調べるにはどうしたら良いでしょうか?
ユーザが偽装できてしまうようではセキュリティ的にマズいですし・・・

やはりアップロードファイルの拡張子を調べるのが一番なのでしょうか?


それから、圧縮ファイルを展開する関数ってあります?
0608nobodyさん2006/07/02(日) 01:27:10ID:???
>>607
ファイルタイプ
http://jp.php.net/manual/ja/features.file-upload.php

圧縮ファイル
http://jp.php.net/manual/ja/funcref.php
の一覧からお好きなものをチョイス
0609nobodyさん2006/07/02(日) 01:41:16ID:W09rfuPj
>>608
>ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif" のようになります。
>この MIME 型は PHP 側ではチェックされません。
>そのため、 この値は信用できません。

これでも大丈夫かな?
0610nobodyさん2006/07/02(日) 01:41:40ID:???
>>606
$nl = "\r\n";
ereg_replace("$nl($nl)+", $nl, $text);
preg_replace("/^$nl/m", "", $text);

^$はマッチ幅ナシね。
0611nobodyさん2006/07/02(日) 01:53:12ID:???
>>609
大丈夫なのか否かってのは何を作りたいかによるから何とも言えない。
確かに、hidden パラメータとかと同じで、改竄はありうる。
しかし、そのファイルが例えば JPEG か否かをちゃんと判断するには
プログラマがそのファイルの内容・構造をチェックして判断しなければならない。
その為には、そのファイルのフォーマットの仕様・特徴(SOI APP …など)
を知っていないと判断のプログラムが書けませんが
それが出来るなら、自分でチェックすれば良い話です。
簡易に済ませたかったら system で file を呼ぶとかも考えられますけど…
0612nobodyさん2006/07/02(日) 01:58:42ID:oZjla2sM
>>610
ありがとうございます

$text = 'log.txt';
$nl = "\r\n";
for($i = 0; $i < count($line); $i++){
if( ereg_replace("$nl($nl)+", $nl, $text) ){
preg_replace("/^$nl/m", "", $text);
break;
}
}

こう作ってみたんですけど、改行抜けません
おかしい所教えてもらえませんでしょうか

0613あああ ◆rHbUqJDbds 2006/07/02(日) 02:09:51ID:???
あ
0614nobodyさん2006/07/02(日) 02:14:51ID:???
サンプル■1234
サンプル■1234■5678

の場合、最初の■以降の文字を消したいのですが、
preg_replace('/■?', '', $str);

こうしたのですがうまくいきません。
どこが間違っているのでしょうか
0615nobodyさん2006/07/02(日) 02:17:45ID:???
>>612

preg_replace("/^$nl/m", "", $text);
↓
$text = preg_replace("/^$nl/m", "", $text);

つーか、せっかくpreg使ってるのに何でeregもつ買ってるの?
pregだけでいいんでない?


$text = file_get_contents("test.txt");
$nl = "\r\n";
$text = preg_replace("/^$nl/m", "", $text);

print($text); //確認

06166142006/07/02(日) 02:19:55ID:J/w8BCAt
すみません、追記です。
方向が変わってしまって^^;

サンプル■1234■5678

これを、最初の■で区切ることはできますか?

サンプル
■1234■5678

こうわけたいのですが
0617nobodyさん2006/07/02(日) 02:30:21ID:???
>>616
俺初心者だからかなり馬鹿っぽいやり方かもしれないけど

$sample = "サンプル■1234■5678";
$line = explode("■", $sample);

foreach($line as $key => $value)
if ($key == 0) $hoge = ($value."\n");
else $hoge .= ("■".$value);

print($hoge);

こんなんはどうかな。
0618nobodyさん2006/07/02(日) 02:30:46ID:???
>>612
もし配列で持ってるなら "" な項を捨てりゃいいだけだよ

>>616
都合のいい方使って好きなように。

$text = "サンプル■1234■5678";
list($mae, $usiro) = explode("■",$text,2);
$usiro = "■".$usiro;
echo "explode: $mae, $usiro\n";

preg_match("/^(.*?)(■.*)$/", $text, $capture);
echo "preg_match: $capture[1], $capture[2]\n";
06196172006/07/02(日) 02:34:46ID:???
うおやっぱ馬鹿丸出しやん・・・

>>618
参考になります!
0620nobodyさん2006/07/02(日) 04:04:38ID:???
<frameset rows="100,*" cols="*" framespacing="1" frameborder="yes" border="1">
<frame src="top.php?id=<? echo $_GET['id'];?>" name="topFrame" scrolling="Yes" id="topFrame" title="topFrame" />
<frame src="logpage.php?id=<? echo $_GET['id'];?>" name="mainFrame" id="mainFrame" title="mainFrame" />
</frameset>

この場合で各フレームのURLを見たところ、?id=がなかったのですが
これでは無理なのでしょうか?
06216202006/07/02(日) 04:05:08ID:???
ちなみに、index.php?id=1でためした場合です
0622nobodyさん2006/07/02(日) 04:11:06ID:???
PHPでの数値をJavaSfcriptで出力ってできませんか?

$abs = 30;

setTimeout("location.href='abc.php'",1000*<? echo $abc;?>);
0623nobodyさん2006/07/02(日) 04:28:26ID:???
>>620
それでできるよ。
他に問題があるんでしょ。
0624nobodyさん2006/07/02(日) 04:32:06ID:???
>>622
PHP は HTML を出力するに過ぎない。
その出力する HTML に変数の値が埋め込まれた JavaScript が書かれれば良いだけ。
言っている意味分かる?
0625nobodyさん2006/07/02(日) 06:15:41ID:???
>>622
$abs != $abc
06266222006/07/02(日) 09:39:02ID:???
>>624
つまり、一気にJavaScriptを書き出せば良いのでしょうか?

>>625
すみません、両方$abcでお願いします
06276222006/07/02(日) 09:44:38ID:???
とりあえず

<?
echo "<SCRIPT LANGUAGE=\"JavaScript\">";
echo "<!--";
echo "setTimeout(\"location.href=logpage.php?id".$id."\",1000*10)";
echo "parent.topFrame.document.form.com.value=\'\'";
echo "-->";
echo "</SCRIPT>";
?>

としてみたところ、結果は同じでした・・・
どうすれば良いのでしょうか
06286222006/07/02(日) 09:57:28ID:???
すみません、解決しました。
0629nobodyさん2006/07/02(日) 09:57:31ID:???
>>627
そもそも「何と同じ」で、期待していたそれと異なる結果とは何?
0630nobodyさん2006/07/02(日) 09:58:14ID:???
出力されたJavaScriptをよく見ろ
0631nobodyさん2006/07/02(日) 10:24:55ID:???
(´・ω・`)
http://question.excite.co.jp/kotaeru.php3?q=2250330
http://pc8.2ch.net/test/read.cgi/hp/1151633256/53
0632nobodyさん2006/07/02(日) 12:02:59ID:???
サイテー
0633nobodyさん2006/07/02(日) 12:12:43ID:???
$_SESSION['var'] = "aaa";
echo $_SESSION['var'];

これって携帯でも表示される?
0634nobodyさん2006/07/02(日) 13:17:57ID:???
cookieダメならSID足したら?
0635nobodyさん2006/07/02(日) 13:44:17ID:???
$str='サーバサイド技術';
print(mb_convert_kana($str,'KV'));
↑の結果が「サーバサイド技術」のままで、全角に変換されないのですが
PHPはFC5のVersion 5.1.4です。
0636nobodyさん2006/07/02(日) 14:00:21ID:???
またお前か。
0637nobodyさん2006/07/02(日) 14:03:50ID:???
>>635
文字コードを指定してやって。
print(mb_convert_kana($str,'KV','euc-jp'));
みたいに。
0638nobodyさん2006/07/02(日) 14:28:22ID:???
>637
ありがとうございます。うまくいきました。

>636
そんなこと言わずにおつきあい下さいな
0639nobodyさん2006/07/02(日) 14:34:36ID:???
636は俺と付き合ってるからダメだ
0640nobodyさん2006/07/02(日) 14:42:29ID:???
おかしいな。俺と付き合ってるはずなんだが・・・?
0641nobodyさん2006/07/02(日) 14:44:45ID:???
まてまて、俺だ
0642nobodyさん2006/07/02(日) 15:11:01ID:???
Macのsafariで \と_が文字化けするために
自作PHPがsafariの場合上手く動作しないのですが、
よい回避策ないでしょうか?

ttp://www.sodan.ecc.u-tokyo.ac.jp/2004/FAQ/faq52-20040330.shtml
06436362006/07/02(日) 15:19:45ID:???
あらら、3つ又がばれちゃったみたいね。
0644nobodyさん2006/07/02(日) 15:27:39ID:???
>>642
そのサイトにUTF-8なら問題ないと書かれているのに何故そうしない?
0645nobodyさん2006/07/02(日) 15:36:09ID:???
下手にUTF使ったら別の状況で問題が発生するだけ
0646nobodyさん2006/07/02(日) 17:31:55ID:YHlCRRoc
掲示板などのデータを楽をしてシリアライズ保存しまう人って多いいのでしょうか?
シリアライズは便利で高速そうですが一度に全ての変数をメモリに乗せてしまう事になるなど
多少のデメリットもあるようですが、みなさんはどう考えられてますか?
0647nobodyさん2006/07/02(日) 17:51:29ID:???
>>646
多いかどうかはわからないけどシリアライズはかなり便利。
俺もよく使ってる。
掲示板のログ全部とかはさすがに入れないけども
要は工夫次第。
0648nobodyさん2006/07/02(日) 17:55:10ID:???
テキストファイルから任意の行だけ読み込む事はできますか?
ファイルポインタとかをどのように指定して良いのか分かりません。
0649nobodyさん2006/07/02(日) 18:53:00ID:???
何行目でやれば?
0650nobodyさん2006/07/02(日) 18:54:27ID:???
file関数で配列にぶち込んで行指定
0651nobodyさん2006/07/02(日) 19:11:02ID:???
レスありがとうございます。

>>649
すいません。よく分かりません。orz

>>650
負荷が気になるのですが、そうするのが一般的なのでしょうか。
0652nobodyさん2006/07/02(日) 19:39:02ID:???
データ量にもよるし。
任意ってのが例えばランダムで選択されるのか
ある文字列がある場合なのか
どのような条件かにもよると思う。
0653nobodyさん2006/07/02(日) 19:39:49ID:???
>>651
ていうか
具体的に何をやりたいのか
いっちゃいなよYOU!
0654nobodyさん2006/07/02(日) 19:58:32ID:???
具体的に、特定行を読みたいんだろうよ。
0655nobodyさん2006/07/02(日) 20:01:04ID:???
一般的かどうかは分からんが、
fopenして、任意の行までスキップすればいいんじゃない?
てか、データの検索でシコシコやりたいならDB使うのが定石だとおもうよ。
0656nobodyさん2006/07/02(日) 20:48:11ID:YHlCRRoc
多次元配列の次元数?を調べる方法はありますでしょうか?
$a[1][2] ← これなら2個とかです
0657nobodyさん2006/07/02(日) 20:50:42ID:???
count($a[1])
0658nobodyさん2006/07/02(日) 20:54:30ID:???
もしかしたら、$a[1][2][3]なら3とか深度の事?だったらない。自分で関数作るしか。
0659nobodyさん2006/07/02(日) 20:56:44ID:???
多分ないな。再帰とかで調べるしか無いと思う。そもそも
array(1, 2, array(3, array(4, 5)), array(6), 7)
は3次元配列とは呼べないと思うし
0660nobodyさん2006/07/02(日) 21:00:08ID:???
>>658
深度というのですね。ありがとうございます。
再帰的関数?を狙ってこんな事な感じで試してみるのですが深度を上手く拾う事が出来ません。
$dに深度を入れようとしているのですが合わないのです。

function box($ary,$d = 0){
foreach(array_keys($ary) as $t){
  if (is_array($ary[$t])) box($ary[$t],++$d);
}
}
0661nobodyさん2006/07/02(日) 21:24:02ID:???
660です
$dに加算する場所が悪かった事がわかりました(−−;
0662nobodyさん2006/07/02(日) 21:34:12ID:???
そうですか(−−;
0663nobodyさん2006/07/02(日) 22:03:18ID:???
ローカルサーバーでは正常に動いたのですが、
サーバーに上げると変数に入れた文字が文字化けしてしまいます。
ちなみにland.toなんですが。。。
これはサーバーの方で設定しなければ直らないのでしょうか?
0664nobodyさん2006/07/02(日) 22:27:30ID:???
EUC
0665nobodyさん2006/07/02(日) 22:32:04ID:???
「あああ」⇒「、「、「、「」
0666nobodyさん2006/07/02(日) 23:07:01ID:???
>>663
land.toのサポートの過去ログを探してみな。
0667nobodyさん2006/07/03(月) 10:58:30ID:TaHjD2Gv
PHPからHTMLに出力する際に全ての改行を除いてしまう
(つまり、出力後のページのソースを見ると改行がない)ようにするには、
どうすればよろしいですか。
0668nobodyさん2006/07/03(月) 11:01:03ID:???
>>667
\r\nを削除したら良いよ
0669nobodyさん2006/07/03(月) 11:14:25ID:???
たまには改行コードがCR+LFじゃない環境のことも思い出してあげてください
0670nobodyさん2006/07/03(月) 11:17:36ID:???
>>667
trim ($str, "\r\n")
0671nobodyさん2006/07/03(月) 11:18:29ID:???
あぁ、\rと\nを削除したら良いよ
そういうつもりで書いたのですが言葉足りなかったですね
0672nobodyさん2006/07/03(月) 11:46:47ID:???
str_replaceで、
\r\n
\r
\n
の順に ""に置き換えればいいとおもうよ。
0673nobodyさん2006/07/03(月) 11:56:16ID:???
>>672
改行コードを<br>に置き換えるんじゃなくて削除するだけなら\rと\nの二回で済むと思われる。
0674nobodyさん2006/07/03(月) 11:57:59ID:???
>>673
なるほど。お前は天才だな
0675nobodyさん2006/07/03(月) 12:02:58ID:???
preg_replace("/\r\n|\n|\r/", "", $text);
0676nobodyさん2006/07/03(月) 13:06:15ID:TaHjD2Gv
改行削除は秀丸の置換でもできるので、
PHPでもそんな感じで何とかなるとは思うのですが、
問題はHTMLを含めて改行を削除するということなのです。

現状は、よくある「HTMLの中にPHPを書いている」という状況なのですが、
この場合のHTMLの内容さえも、改行を除いて出す必要があります。

通常の出力内容を$html_beforeとし、
$html_after = 改行処理($html_before)でとして
$html_afterを出力すれば良いのですが、
そう簡単にもいかないような。

要は、出力内容を$html_beforeに格納する方法ですね。
■ このスレッドは過去ログ倉庫に格納されています