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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2006/02/05(日) 22:35:34ID:sf8bx52D
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

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

本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/

過去スレは>>2
0904nobodyさん2006/02/22(水) 23:15:23ID:???
>>903
それだと
HOGE('<strong>ここは<強調>したいんです</strong>');
はダメだからわけるしか無い
0905nobodyさん2006/02/23(木) 01:36:14ID:???
レッツPHPは日本での普及のきっかけにもなったんだから、
そこらへんは評価してあげないと。
今となっては穴だらけのスクリプトでも、
当時は感動したもんだ。
0906nobodyさん2006/02/23(木) 02:01:43ID:???
phpで作成したhoge.dataファイルに再度書き込みをしたい時にパーミッションの関係で書き込みできません。
chmodコマンドは、借りている鯖側の処理で禁止されているのかな?
ファイル生成段階で属性って決めて保存ってできるか教えてください。
0907nobodyさん2006/02/23(木) 03:07:02ID:???
>>906
普通、PHPで出力したものは自分自身がそのオーナーなんだから
特にパーミッションなんて変更しなくても再読み書きできるもんだが、
そこのサーバーで何かおかしな真似されてるんじゃないか?

で、chmod以外でパーミッション設定は無理かと。
0908nobodyさん2006/02/23(木) 10:25:22ID:???
定数を""で囲った中で出力する場合どうしたらいいのでしょうか?
マニュアル見ても
define ("CONSTANT", "Hello");
echo CONSTANT; // "Hello"を出力します。
としか書いてないんですけど、
echo CONSTANT World!!;
といれたらエラーが出ますし、
echo "CONSTANT World!!";としたらそのままの文字列が出力されてしまいます。
変数の場合は、
echo $a;でもecho "$a";でもecho "{$a}";とかでも出力されますよね?
定数もecho "{CONSTANT}"みたいに何かで囲むことで、
出力されるようになるということはないですか?
それともこういう使い方の場合は変数を使えということでしょうか?
0909nobodyさん2006/02/23(木) 10:44:59ID:???
>>908
定数を "" で括って使う事自体定数の使い方がおかしい。
定数はその内容を意識しないで使うモンだ。

fopen( "example.dat", LOCK_EX ); の LOCK_EX みたいに普通は引数に使うだけ。
ライブラリや組み込み関数で使う定数の内容なんか意識しないで使うだろ?

そういう使い方をするものは変数が適している。
09109092006/02/23(木) 10:48:11ID:???
ちょっと例に出した fopen 関数の引数が激しく間違っているが
flock( $resource, LOCK_EX ) と思ってくれ
0911nobodyさん2006/02/23(木) 10:52:40ID:???
echo CONSTANT."World!!";
0912nobodyさん2006/02/23(木) 11:01:07ID:HLa5KG/+
mb_ereg_replaceで
{ ? ? ? ( ) などを置換したくて[{???()]と書いてもパースエラー
[\{???\(\)]と書いても同様にパースエラーがでます。
Parse error: parse error, unexpected '[', expecting ')'

たぶん ) がエスケープできていないと思うのですがどうすれば ) を
エスケープできるのでしょうか。
0913nobodyさん2006/02/23(木) 11:02:30ID:HLa5KG/+
うあ、特殊な文字が?に化けてる。
そこは気にしないでください。
0914nobodyさん2006/02/23(木) 11:33:12ID:???
>>911が正しいが
ふつうは>>909-910だな。

いい所を横取りな俺。
0915nobodyさん2006/02/23(木) 11:38:47ID:???
>>907
ううむ。
とりあえず返信thx
0916nobodyさん2006/02/23(木) 12:30:30ID:???
>>912
\(じゃダメ?
0917nobodyさん2006/02/23(木) 13:22:18ID:???
次スレのテンプレなんか追加するものある?
phpの他のスレを関連として書いとくとかFAQとか
0918nobodyさん2006/02/23(木) 13:35:18ID:???
>>826とかどうよ?
0919nobodyさん2006/02/23(木) 14:11:48ID:HLa5KG/+
>>916
だめみたいです。
勘違いしているだけかもしれませんが、

$text = '(abc)'
$text = mb_ereg_replace("[\(\)]*","",$text));

というふうに原因追及のため簡単に書き直して試してみましたが
やっぱりパースエラーが出ちゃいます。
parse error, unexpected ')'

var_dump($text)でabcと出したいのですが、
どこを間違えているのでしょうか。

PHP Version 4.4.1です。
0920nobodyさん2006/02/23(木) 14:24:04ID:???
>>919
) が多いんじゃねーの
0921nobodyさん2006/02/23(木) 14:32:02ID:???
>>920
なー
mb_ereg_replace の括弧な。
開きは1コなのに閉じが2コ。

問題は正規表現じゃねー。
0922nobodyさん2006/02/23(木) 14:36:59ID:???
>>920-921
助かりました、マジでありがとうございます。

こんなことに何時間も悩んで、
なんかすごくバカらしくて涙が出てきました。
0923nobodyさん2006/02/23(木) 15:30:20ID:???
正規表現のエラーなら
mb_ereg_replace errorとか関数名がきちんと出てくるしな。

>>922
そうやって成長してくもんさ。
オメデトウ。
0924nobodyさん2006/02/23(木) 15:32:42ID:???
>>922
PHPの文法チェック機能がついてるエディタとか開発環境使うと涙の数は減るよ
0925nobodyさん2006/02/23(木) 15:51:26ID:???
>>924
何使ってる?
俺はOEdit使ってる。
残念ながらPHPは未対応だけど。
0926nobodyさん2006/02/23(木) 16:08:03ID:???
コマンドライン起動のスクリプトの中で
自ホストを取得するには
どうしたらよいでしょうか?
0927nobodyさん2006/02/23(木) 16:13:05ID:???
>>925
PHPeclipse
CVSとエディタしか使ってないから使いこなせてるとは言い難いんだけどね('A`)
ロースペックマシンだと動作の重さで涙が増えるかも。
統合開発環境スレだともっといろいろ教えてくれるんでないでしょか。
0928nobodyさん2006/02/23(木) 16:49:23ID:???
正直、(〜)と{〜}の対応チェック&ジャンプ機能がついてるエディタがあれば十分だと思う。
個人的にあるとうれしいのはHTMLのタグ間ジャンプ。
閉じタグを確認するというより編集範囲を探し出すのに重宝するって感じだけどね。
0929nobodyさん2006/02/23(木) 17:00:38ID:???
タグを 田 って感じでごっそり閉じれるエディタは便利だよな
0930nobodyさん2006/02/23(木) 17:09:57ID:???
>>926
IPでなくホスト名?それってその気になれば複数設定できないか?
0931nobodyさん2006/02/23(木) 17:12:12ID:???
全角カナを半角カナに置き換えるコードってないでしょうか?

<form action="index.php">
<input type="text" name="moji" size="40" value="<?echo "<a href="database.cgi?keys2=" . $moji . "">" . $moji . "</a>" ?>">
<input type=submit value=sub>
</form>

こんな感じでフォームに文字を入れてsubmitすると
$moji の部分が置き換わるようにしてるんですが、
これを

<input type="text" name="moji" size="40" value="<?echo "<a href="database.cgi?keys2=" . $moji . "">" . $moji2 . "</a>" ?>">
として、
「$moji」は入力した通りの文字, 「$moji2」は全角カナがある場合は半角カナに置き換えて表示するようにしたいのですが。
0932nobodyさん2006/02/23(木) 17:17:40ID:???
失礼
<?echo "&lt;A href=&quot;database.cgi?keys2=" . $moji . "&quot;&gt;" . $moji . "&lt;/A&gt;" ?>">

<?echo "&lt;A href=&quot;database.cgi?keys2=" . $moji . "&quot;&gt;" . $moji2 . "&lt;/A&gt;" ?>">
0933nobodyさん2006/02/23(木) 17:22:24ID:???
日本語正規表現で出来ないかな。
まぁカタカナなんて50種類ぐらいしかないんだから、
悩むより全通りやったほうがはやいとおもう^^;
0934nobodyさん2006/02/23(木) 17:22:32ID:???
とりあえず俺が思いついたのは
preg_replaceで地道に
$zenkaku = array ("ア", "イ", "ウ"...);
$hankaku = array ("ア", "イ", "ウ"...);
とやる。
0935nobodyさん2006/02/23(木) 17:25:27ID:???
>>931
mb_convert_kana($str, "k");
0936nobodyさん2006/02/23(木) 17:56:09ID:???
>>935
が一番スマートな方法だね。
ただ、コンパイル時にマルチバイト関数を有効にしていないと使えないけど。
0937nobodyさん2006/02/23(木) 18:00:27ID:???
パッケージ管理システムとかで入れてれば、マルチバイト関係のパッケージ入れるだけだけどね
0938nobodyさん2006/02/23(木) 20:00:51ID:???
>>930
ホスト名です。
しかもバーチャルホストなんですけど
0939nobodyさん2006/02/23(木) 20:11:35ID:???
>>938
CLIからWebとかftpのバーチャルホストかどうかなんて判んないから取得できないよ。
CGIのI/Fのように環境情報が渡されてないから。
0940nobodyさん2006/02/23(木) 20:11:47ID:???
>>938
マンコドラインからphpinfo()実行してみ
0941nobodyさん2006/02/23(木) 20:16:24ID:???
マンコラインとは縦筋の事か?
0942nobodyさん2006/02/23(木) 20:30:32ID:???
>>938
で、そのCLIってのはどうやって起動されるんだ?
Web上のPHPやCGIからsystemで呼び出し?
それとも手動またはcronで実行?
前者なら子プロセスに環境変数が継承されるかもしれないが、
後者なら「ホスト名というもの自体が存在しない」よ。
無い物は取得不可能。
0943nobodyさん2006/02/23(木) 20:52:38ID:aYPvtFuR
鯖の生存を確認するのに
$fp = @fsockopen('www.example.xxx', 80, $errno, $errstr, $timeout);

ってやっています。
できるだけ素早く判別してもらいたいんですが$timeoutの値の目安ってありますか?
0944nobodyさん2006/02/23(木) 20:55:27ID:???
10秒ぐらいでいいじゃん
0945nobodyさん2006/02/23(木) 21:23:39ID:???
5秒で十分
それ以上は死んでいるも同然
0946nobodyさんNGNG
>>945
たまに重い鯖もあるけどねm9( ゚д゚)
まあどれぐらい重ければdownと見なすかで決めれば良いじゃない
0947nobodyさん2006/02/23(木) 21:34:56ID:???
>>942
>>926で「ドマンコライン」って言ってる罠
09489432006/02/23(木) 21:41:59ID:???
>>944-946
3秒で遅いと感じていたんですが現状維持で行こうと思います
ありがとうございましたm(_ _)m
0949nobodyさん2006/02/23(木) 23:04:53ID:???
ソケットよりもpingがオススメ
0950nobodyさん2006/02/23(木) 23:29:27ID:???
PHPで最大同時接続数を制限することはできますか?
0951nobodyさん2006/02/23(木) 23:53:06ID:???
できる
0952nobodyさん2006/02/24(金) 00:42:35ID:???
.htaccessの仕事っぽい
0953nobodyさん2006/02/24(金) 02:01:19ID:???
extractの話題が良く出てますけど、
$hoge = $_POST['hoge'];
をextractを使って表現するとどのように書けばいいのでしょうか?
特に何もしないとXSSの原因になるそうなので、
わからないうちは使うつもりはありませんが、気になるので・・・
0954nobodyさん2006/02/24(金) 02:13:43ID:???
>>953
extract ($_POST);
$hoge == $hoge;
0955nobodyさん2006/02/24(金) 02:30:53ID:???
>>953
extract($_POST, EXTR_SKIP);

extract($_POST, EXTR_PREFIX_ALL, "post");
のどっちかかな。
$hoge = $_POST['hoge'];相当なのは前者。
後者は$post_hoge = $_POST['hoge'];相当。
0956nobodyさん2006/02/24(金) 02:36:19ID:???
>>954
どうもありがとうございます。
早速実行してみたところ、
ちゃんと$hoge = $_POST['hoge'];と同じになりますね。
便利ですねえ。
どういう危険性があるか理解できるまで使わないことにします。
ひとつ謎が解けました。ありがとうございました。
0957nobodyさん2006/02/24(金) 02:38:49ID:???
>>955
レスしてる間にレスがorz
詳しくありがとうございます。
値もいろいろと指定できるんですねー
早速値に関してどういったものか調べてまいります。
0958nobodyさん2006/02/24(金) 03:44:05ID:???
>>956
extractで展開していると
予期しない変数を書き換えられる危険がある。
例えばパスワードを$passに設定している場合に
hogehoge.com?pass=〜
でアクセスされ、これをextractで展開すると…。
↑はgetの場合だけれど
ローカルでフォームを書けばpostだって送りつけられるし。
0959nobodyさん2006/02/24(金) 03:59:26ID:???
>>956
>>826
0960nobodyさん2006/02/24(金) 04:00:42ID:???
>>958
見たいに
example.com?pass=5
しか想定しないでextractすると、下のURLみたいなアクセスをされた場合に大量に変な変数作られるのが危険て事?
example.com?pass=5&user=hoge&db=example.com

予期しない変数を大量に作られるのは気持ち悪いね
でも、プログラムの一番最初にextractすれば変数の内容は上書きされないような気もするけど・・
0961nobodyさん2006/02/24(金) 04:24:48ID:???
じゃあパスワードは定数にすればいいってことか!
0962nobodyさん2006/02/24(金) 06:38:31ID:???
引用
http://jp2.php.net/manual/ja/function.extract.php

警告
extract() をユーザー入力 ($_GET, ...) のような信頼できないデータについて使用しないでください。
もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、
EXTR_SKIP のような extract_type の値が上書きされていないことを確認してください。そして php.ini の
variables_order で定義されたものと同じ順で展開すべきであることに留意してください。

ま、他人のサーバがどうなろうが知ったこっちゃ無いが
0963nobodyさん2006/02/24(金) 07:41:52ID:???
>>960
>>826
0964nobodyさん2006/02/24(金) 08:35:07ID:???
掲示板のように入力させるようなデータはおとなしく、
$data=$_POST['data'];にしとけばいいってこと?
他人のスクリプト見ると、
extractを使うのが一般的だとか思っちゃうけど…
0965nobodyさん2006/02/24(金) 09:41:42ID:???
>>964
それだけ我々にとって「チャンス」があるということです。
フフフ・・・
0966nobodyさん2006/02/24(金) 10:14:36ID:???
>>964
>他人のスクリプト = Le●sPHP = 過去の遺物 = 諸悪の根源
0967nobodyさん2006/02/24(金) 10:24:28ID:???
extractをpostやgetに使わなければ全然問題ないじゃん
0968nobodyさん2006/02/24(金) 12:03:24ID:???
>>964
それは過去の遺物。
大昔(と言ってしまおう)のPHPがデフォルトでextractと同等のことを自動的にする仕様だったんで、
その頃からPHPで物作ってる人は互換性のためにextract使っちゃうのよ。
で、そういうプログラムって過去の実績は多数あるんで、さらに巷で大量に流布しちゃって
それを真似する素人プログラマがまた問題があるままパクって傷を広げてしまうんだな。
0969nobodyさん2006/02/24(金) 12:05:01ID:???
>>967
別にextract関数自体が問題あるって話ではないわな。
でもクエリーの展開以外にextractを使う人ってほとんどいないけどなw
0970nobodyさん2006/02/24(金) 12:09:34ID:???
>>964
具体的に誰のスクリプトだか名を上げて欲しい。
0971nobodyさん2006/02/24(金) 12:34:57ID:???
>>970
>>966
0972nobodyさん2006/02/24(金) 12:39:54ID:???
>>969
DBの出力に使ったりするとわりと便利だよ
0973nobodyさん2006/02/24(金) 12:52:58ID:VruGZZOM
PHPで作られてるサイト(SNSなど)のソースを落として
解析って出来ないのでしょうか?
0974nobodyさん2006/02/24(金) 12:59:26ID:???
>>971≠>964でしょ?
とりあえず本人がどこのサイトのソースを見て思ったのか、
それが知りたい。
0975nobodyさん2006/02/24(金) 13:07:03ID:???
>>973
ソース公開していれば可能
0976nobodyさん2006/02/24(金) 14:56:56ID:j/2+6+fN
PHP5で、<input type="image" src="">のフォームボタンでPOSTの値が
取得できなくて困っています。GETは取得できます。
<input type="submit">だと、POST/GET両方普通に取得できます。
09779732006/02/24(金) 15:05:59ID:???
>>975
どうやるんすか?
0978nobodyさん2006/02/24(金) 15:22:12ID:???
>>977
ソースダウンロードしてマニュアルとにらめっこ
0979nobodyさん2006/02/24(金) 15:29:01ID:???
>>976
nameっていらないんだっけ?
09809732006/02/24(金) 15:32:05ID:???
>>978
おお、なるほど。本当にソースダウンロードしてって感じですね。
大きいサイトでソースを公開しているところって殆どないですよね?
SNSなどでソース公開しているところってご存知?
0981nobodyさん2006/02/24(金) 15:40:10ID:???
systemとかexecでcalc.exeを実行し電卓をだした後画面を消したいのですが
実行処理の後にwindow.closeとか書いても電卓が消されないと下の処理に移動しません。
system("calc.exe > /dev/null &")
とかもやったのですがこっちは電卓が画面に表示されませんでした。
どうすればよいのでしょうか?
0982nobodyさん2006/02/24(金) 15:43:23ID:???
>>981
君には、VBが良いと思ふ
0983nobodyさん2006/02/24(金) 17:15:42ID:aTqN8USg
2時間ググりましたが答えに辿りつきませんでした…

外部のサイトを読み込み、文字コードを変換して出力したいのですが
どうしてもエラーの表示が出てしまいます。
多分、とてつもなく馬鹿な事をしているのだと思いますが…
この場合、どのようにしたら良いのでしょうか?
ヒントだけでも頂けたら幸いです。

下記、エラーが出たもの

<?php
$max =30;//MAX件数

$arr = file("http://pc8.2ch.net/php/subback.html");
$lines = $arr;
$lines = mb_convert_encoding($lines, "UTF-8");

for($i = 0; $i < $max; $i++)
echo $lines[$i];

?>

0984nobodyさん2006/02/24(金) 17:17:39ID:???
>>983
エラーが出てるならどんなエラーが出たかくらい書かないと怒られちゃうよ。
09859832006/02/24(金) 17:20:12ID:???
WebProg板のスレタイ一覧になっていますが、
実際のものは<html><head><meta>系タグを抜いた、
<li><a>テキスト</a></li>\n
といった固定の形式のものが並んでいるのみです。(読み込み先はSJIS)

>>984
すみません。
phpのエラー表示ではなく、
なぜか一言、白い画面に「Array」と出るのみです
0986nobodyさん2006/02/24(金) 17:33:56ID:???
それエラーじゃないじゃん
$lines[$i]が配列なだけ
変数がどういう値もってるのかいろんなとこでvar_dump()してみろよ
0987nobodyさん2006/02/24(金) 17:58:16ID:???
>>983
>$lines = mb_convert_encoding($lines, "UTF-8");
ここがおかしい。 mb_convert_encoding()がパラメータに
どのような型を取りうるのか確認。
0988nobodyさん2006/02/24(金) 18:05:03ID:???
>>983
2時間も何を検索してたん
<?php
$max =30;//MAX件数

$lines = file("http://pc8.2ch.net/php/subback.html");
//$lines = $arr;
//$lines = mb_convert_encoding($lines, "UTF-8");

for($i = 0; $i < $max; $i++)
echo mb_convert_encoding($lines[$i], "UTF-8", "sjis");

?>
0989nobodyさん2006/02/24(金) 18:22:03ID:???
>>987の所でエラーが出ないって事は、表示しない設定になっていそうだ
0990nobodyさん2006/02/24(金) 20:11:38ID:???
>>989
確かにNoticeがでるな
$lines = mb_convert_encoding($lines, "UTF-8");
Notice: Array to string conversion in ****.php on line *
0991nobodyさん2006/02/24(金) 20:13:31ID:???
>>983
1行目に、

error_reporting(E_ALL);

を記述しておきましょう。デバッグに役立ちます。
0992nobodyさん2006/02/24(金) 20:14:43ID:???
>>980
XOOPSなどいかがでしょうか。
SNSとは違いますが。
0993nobodyさん2006/02/24(金) 21:03:11ID:???
Let'sPHPってダメダメなのか〜
他にいい資料置いてるとこない?
0994nobodyさん2006/02/24(金) 21:29:00ID:???
ttp://www.spencernetwork.org/
こことか・・・
0995nobodyさん2006/02/24(金) 21:32:10ID:???
>>993
>>1
0996nobodyさん2006/02/24(金) 21:55:52ID:???
スペンサーって誰だよ
09979832006/02/24(金) 22:04:04ID:???
質問しておきながらレスが遅くなりました

>>986-991
皆さん本当にありがとうございます。
自分はまだforの扱いすらあやふやな所があり論外なレベルなので
皆さんのレス保存して、根っこから勉強しつつやってみます。
ありがとうございました。
09989832006/02/24(金) 22:07:26ID:???
お礼もかねて次スレ立てときました。
どこか間違ってたらごめんなさいね

【PHP】下らねぇ質問はここに書き込みやがれpart17
http://pc8.2ch.net/test/read.cgi/php/1140786348/l50
0999nobodyさん2006/02/24(金) 22:12:15ID:???
>>998
おまえ・・・使える奴だな。
がんばれよ。乙
1000nobodyさん2006/02/24(金) 22:13:27ID:???
どう見てもくだらないです。
本当にありがとうございました。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。