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

【PHP】初心者コーナー 2 Released

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/24 03:06ID:???

PHPに関するアホな質問はここでやれ。今回からMySQLも受付開始。
アホな質問であっても詳しく質問すること。

PHPが大嫌いなPerl信者もぜひご参加ください。

前スレ
http://pc2.2ch.net/test/read.cgi/php/1011550860/l50  関連>>2-10

普通の質問はこっちな、【PHP】質問スレッド Part7
http://pc2.2ch.net/test/read.cgi/php/1044478561/l50
0213nobodyさん03/04/04 22:55ID:???
echo $_SERVER["HTTP_USER_AGENT"];
0214nobodyさん03/04/04 23:07ID:???
$hen = $_SERVER["HTTP_USER_AGENT"];
if(ereg("Mozilla",$hen)){$hen = "pc";}
elseif(ereg("P503iS",$hen)){$hen = "P503iS";}
else{echo"変ですか?";}
echo $hen."です。";
0215nobodyさん03/04/05 00:04ID:???
$user_agent= explode( "/", getenv("HTTP_USER_AGENT"));
switch( $user_agent[0] ){
case "DoCoMo" : $file = "index_docomo.php"; break;
case "L-mode" : $file = "index_lmode.php"; break;
case "ASTEL" : $file = "index_astel.php"; break;
case "UP.Browser" : $file = "index_upbrowser.php"; break;
case "PDXGW" : $file = "index_pdxgw.php"; break;
case "J-PHONE" : $file = "index_jphone.php"; break;
case "PlayStation2" : $file = "index_playstation.php"; break;
default : $file = "index_pc.php"; break;
}
include $file;

でけました!
0216nobodyさん03/04/05 09:10ID:???
>>210
新規作成するフォルダに、ファイル作成のパーミッション(アクセス許可)が無いといけない。
Windowsやmacの場合もそういう制限があるんじゃないの?
021721003/04/05 09:19ID:E09q+9L8
はい。個人で使うものなので、パーミッションは問題ありませんです。
既存のファイルを選択することはできるのですが、
新規ファイルを作成する場所(フォルダ)をどうすれば選択できるように
なるのでしょうか?
0218nobodyさん03/04/05 10:26ID:???
>>217
ファイル名にフォルダ名をつける。
$export_file="./hoge/hoge.txt";
021921703/04/05 18:08ID:RCPiYo/6
う〜ん。もうちょとスマートな方法ないでしょうか?
0220nobodyさん03/04/05 18:25ID:???
fopen($folder.$export_file, 'w+');
0221nobodyさん03/04/05 22:05ID:???
空白か特定の文字列の場合に、処理をやめさせるってのはどうすれば…。
例えば掲示板とかで書き込みする時とか。

初心者です!(←これ言えば何でも許される)
0222nobodyさん03/04/05 22:29ID:???
>>221
逃げを打つ前に説明の仕方を何とか汁(初心者スレ以外でやったら叩かれるぞ)
そもそも、処理をやめさせるって?
FormのTEXTの内容に、ある文字列(”氏ね”とか)があったら、書き込みを反映させたくないって事?
なら、if文の条件の中でpreg_match()関数でも使って、書き込みさせるかさせないか分岐とか。
preg_macth()の使い方はリファレンスでも見てくだされ。
0223nobodyさん03/04/05 22:33ID:???
○書き込みさせるかさせないか分岐とか。
×書き込みさせるかさせないか分岐させるとか。

関数の使い方は>>2のPHP マニュアルへGO。
正規表現がわかんなかったら、それなりのサイトを探すべし。
基本的な内容程度なら載ってるサイトはちょこちょこあったと思う。
0224nobodyさん03/04/05 23:10ID:???
もし、文字列に"初心者です!"が含まれたら投稿中止です。
if(ereg("begin",$moji)){echo"dame";exit;}
elseif(ereg("space",$moji)){echo"dame";exit;}
else{echo"iiyo";}  //正規表現のあたりを調べろと。
022521703/04/05 23:46ID:E09q+9L8
>fopen($folder.$export_file, 'w+');
この場合、テキストフィールドに朱入力して、
$folder,$export_fileに代入ということでしょうか?

ではなくて、ナビゲーションを使って、フォルダを選択して、
そこに任意の新規のファイル名を指定できればいいのですが。。。

0226あぼーん03/04/05 23:48ID:???
             ∩
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (  ´Д`)//  < 先生!こんなのを発見シマスタ!
      /       /    |
     / /|    /      \  http://saitama.gasuki.com/yuusei/
  __| | .|    |         \
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\     \_____________
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0227nobodyさん03/04/06 00:56ID:???
>225
最も楽に作るという前提で。
up可能なフォルダを列挙してラジオボタンを付けて、
チャックしたフォルダにファイルをupする、とか。
フォルダとツリーで表示したいならopendir、readdir、is_dirで再帰しながら表示、とか。
[+]とか[-]でフォルダを閉じたり開いたりだと手間掛かるね。
0228nobodyさん03/04/06 14:18ID:/QV6d5uq
質問です。
PHPでint関数を使うと

Fatal error: Call to undefined function: int()

と出てしまうのですが、PHPでintに該当する関数は何になるの
でしょうか?教えてください。
厨質だったらすいません。
0229nobodyさん03/04/06 14:22ID:???
>>228
settype($i,"integer");
こうか?
023022803/04/06 14:29ID:/QV6d5uq
>>229
ありがとうございます。
調べてみたところsettypeを使うみたいですね。
ただintとは使い方が違うみたいで、そのまま置き換えられないようです。
自分でいろいろ試してみます。
お騒がせしました。
0231nobodyさん03/04/06 14:39ID:???
int関数ってのがどういう動作を期待してるのか分からないけど
float(double)から整数に変換する & 数を0の方にまるめる
だけなら(int)$value のようにキャストできるよ
023222903/04/06 14:41ID:???
そうだ。C同様、PHPにもキャストがあるんだった。
0233nobodyさん03/04/06 15:06ID:???
質問っす。ちょっとPHPとは離れてそうなのですが、
300個近いチェックボックスをPOSTしようとしているんですが、
$_POSTで値が取得できません。
何か制限とかあるものなんですか?
0234aaaa03/04/06 15:27ID:/US/lhYB
http://www5b.biglobe.ne.jp/~ryo-kyo/osu.html

http://my.vector.co.jp/servlet/System.FileDownload/download/ftp/0/279026/pack/win95/game/table/pachinko/sikisai.lzh
0235nobodyさん03/04/06 16:20ID:???
>>233
600個のcheckboxで試してみたけどちゃんと動きました。
getの場合でも問題無し。
制限があるとすれば、apacheの場合だと LimitRequestBody あたりかな。
でもMBのオーダーの設定になってると思うので、たぶん無関係かと。
formやphpソースを疑ってみてはいかがでしょうか?
0236nobodyさん03/04/06 18:41ID:KOyF6yOz
phpでrefereを取る方法はいろいろありますが、
どう書くのが一般的ですか?

どっちが見やすいかで、小一時間討論しました
0237nobodyさん03/04/06 18:49ID:???
どっちって言われてもなぁ....選択肢無しってことは新手の質問の仕方かのお。
マニュアルの「定義済みの変数」に載ってるよ。
0238nobodyさん03/04/06 18:57ID:???
>>236
$_SERVER[HTTP_REFERER]
0239nobodyさん03/04/06 20:02ID:3XWizH/3
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
024023603/04/06 20:33ID:KOyF6yOz
すいません、言い方誤りました。
refererとって、アクセスランキングをつける方法です。

選択肢はいろいろありますが、
私の場合はファイルをキューとして扱う。
つまり、一番最近アクセスがあったものが上の方におく。
という事です。

友人の場合は、ちゃんとアクセス数をカウントして
アクセス数順に並べるとのこと。

他にも方法はあると思いますが、
どんなのがいいんでしょうか?
024123303/04/06 21:01ID:???
>>235
- と _ のみ間違いでした。はやとちりスマソ。
thx!
0242nobodyさん03/04/06 21:45ID:???
>238
初心者スレなんで正確に'HTTP_REFERER'とクォートで括りたいところ。
0243nobodyさん03/04/07 12:16ID:hoqq1ppB
ユーザ関数を1つのファイルにまとめておきたいのですが、その関数を他のファイルから
読み込むには、includeなどで指定しないといけないのでしょうか?
0244nobodyさん03/04/07 13:30ID:vjvunX5V
>>243 そう。
あと、auto_prepend_file/auto_append_fileディレクティブなどで
自動的に、全部のスクリプトに対して付けちゃう事はできるけどね。
0245nobodyさん03/04/07 19:11ID:q77L0+Oc
ある文字列から、URLを含む文を抽出して配列に格納したいのですが
どのようにすればいいですか?
0246nobodyさん03/04/07 19:32ID:???
>>245
正規表現を使う
0247nobodyさん03/04/08 15:00ID:Fj+rJIyE
>244
ありがと。includeを一つ一つのファイルで指定するのは面倒なんですよね。
auto_append_file試してみます。
0248nobodyさん03/04/08 15:41ID:???
perlでいうところの
my にあたる局所変数宣言っていうのはPHPではどうやるんでしょうか?
0249nobodyさん03/04/08 15:51ID:AcET4E/D
PHPのチャットスクリプト探してるんですけど、
ADDS PHPフォーラム(ttp://www.mac68k.com/)のsimple chatってのがかわいかったんでDLして解凍してそのままUPして、index.phpにアクセスしてみたもののなんどログインしようとしても最初のindex画面にもどってしまうんですが、どこか設定いじるのでしょうか?
わかるかた教えてください。
0250nobodyさん03/04/08 15:56ID:???
作った本人きけよ
0251nobodyさん03/04/08 16:25ID:Fj+rJIyE
php.ini????????????????????
?????????????????
0252nobodyさん03/04/08 17:32ID:+i7U7kfX
oracle に接続して emp テーブルの値を表示するサンプルはできたしかし
テーブル名が漢字で項目名も漢字のやつを表示させようとしたら

Warning: OCIStmtExecute: ORA-00911: 文字が無効です。
Warning: OCIFetch: ORA-24374: フェッチまたは実行してフェッチする前に、定義が行われていません。
とかいって怒られるのだが、漢字はだめなの?

0253nobodyさん03/04/08 17:36ID:s/4eB37U
>>248
PHPはPerlとは逆にglobal宣言しないとデフォルトで局所化された状態。
0254nobodyさん03/04/08 18:10ID:+i7U7kfX
252だけど oracle は Windowsサーバで稼動している
0255nobodyさん03/04/08 18:25ID:???
>>253
sub hoge{
 my $a = 'mona'
 print $a;
  { my $a = 'giko' print $a;}
 print $a;
}
ってPHPではどう書くんでしょ?
myを省略するだけ?
025625503/04/08 18:29ID:???
やってみたら mona giko giko になっちゃいますな
mona giga mona って表示したいんですけど。
025725503/04/08 18:47ID:???
255のやつをPHPで書くと

function hoge(){
$a = 'mona';
echo $a;
giko();
echo $a;
}

function giko(){
$a = 'giko';
echo $a;
}

こんなメンドイことになるんでしょうか?
0258nobodyさん03/04/08 18:49ID:???
>>257
本来あるべき姿です。Perlがいかに前衛的な言語であるかがわかるな。
025925503/04/08 18:53ID:???
>>258
マヂ?局所変数使えないの?PHPって
0260nobodyさん03/04/08 19:11ID:???
やっとられんな。
0261nobodyさん03/04/08 20:23ID:CvB40OAj
こんにちは。ちょ〜ど素人で申し訳ないんですが....
http://works.xrea.jp/
こちらを参考にして、Yahoo の Topixを表示させるやつを作ってるんですが、
Yahoo TOPIXの『・』こんなやつを 画像に変えたりとかはできないんでしょうか?
eregi_replaceとか言うのを使って、テーブルタグを消して<BR>入れてってとこまでは
なんとかできたんですが....
自信無いんですけど,,,,
$t_news[1] = eregi_replace( "<tr[^>]*>", "", $t_news[1]);
$t_news[1] = eregi_replace( "<td[^>]*>", "", $t_news[1]);
$t_news[1] = eregi_replace( "</tr>", "",$t_news[1]);
$t_news[1] = eregi_replace( "</td>", "<br>", $t_news[1]);
みたいに....
でも 行頭に入る 『・』は日本語だからエラー出ますよね?
どうしたらいいんでしょうか?
ど素人なんでさっぱりです。調べてみたんですけど、みつからなくて。
誰かアドバイスお願いします!
0262nobodyさん03/04/08 23:07ID:???
mb_eregi_replace
http://jp.php.net/manual/ja/function.mb-eregi-replace.php
0263nobodyさん03/04/08 23:35ID:vCzfJEVd
とあるサイトに、
socket_connect ($socket, $address, $service_port);
とsocketを接続しようとすると、
Warning: socket_connect() unable to connect [111]: Connection refused
というエラーがかえってきます。

これは、文字通り、拒否されて居るんですよね・・・?
そのサイトは、ブラウザからアクセスすると普通に見られるのですが、
phpのsocket開くのとブラウザと、向こうのサイトで区別して拒否してるんでしょうか?
0264nobodyさん03/04/08 23:36ID:vCzfJEVd
あ、phpはレンタルサーバにおいているので、
ブラウザで見るのとはドメインが違います。
0265nobodyさん03/04/08 23:47ID:???
ところで 本当にPHPでは局所変数っていうのは
存在しないのでしょうか?
0266nobodyさん03/04/08 23:48ID:???
fsockopen
<?php
$fp = fsockopen ("www.php.net", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\nHost: www.php.net\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}
?>
てか、pear 使おう
0267nobodyさん03/04/09 00:06ID:???
>>265
局所変数バカか。答>>253
0268sage03/04/09 00:14ID:tMXWJMSn
>>262さんありがとうございました!!
マルチバイト文字列とかそういう言葉(?)が出てこなかったので、
助かりました!
本当にありがとうございました。
0269nobodyさん03/04/09 00:15ID:???
>>265
局所変数がないのではなく、
perlみたいなブロックがないということ ?
perlは何でもあるからね。
027026303/04/09 00:40ID:Uzz9bVZG
>>266
早速試してみました!→できました(゚∀゚)ありがd!
networkをもっと勉強する必要がありそう。。
ありがとでした〜(^^
0271nobodyさん03/04/09 00:50ID:???
>> 270 pearは?
http://pear.php.net/manual/ja/core.networking.net_socket.php
0272nobodyさん03/04/09 01:01ID:???
>>269
PHPしか知らないってのも痛いが、perlしか知らないってのは
どうしょうもねぇなぁ。
027326303/04/09 01:04ID:Uzz9bVZG
>>271
あ、実はその部分の意味わからなかったんです(汗
なるほど、そういうclassがあるんですね。便利そうですね。
補足さんきうでした!
0274nobodyさん03/04/09 01:40ID:oDK2LGgX
XREAでPHPをいろいろ試してます。
些細なことで申し訳ないんですが、ひとつお聞きしたいことがあります。
phpinfo() で画像が表示されません。
×印になってしまいます。
なんでですか?

ソースは以下の通りです。
----------
<?php
phpinfo();
?>
----------
0275nobodyさん03/04/09 02:01ID:???
public_htmlでない
shared_htmlでる
0276nobodyさん03/04/09 02:18ID:???
>>274
PHPのバージョンがふるかねぇ?
output_handlerの指定をしているとか。
0277nobodyさん03/04/09 02:35ID:???
局所変数バカと言われたなぁ
PHPは本当に初心者なんだからもうちょい優しくしてくれよ
027827403/04/09 03:04ID:fs4GFxJp
>>275
ありがとうございます。確かに出ますね。
なんででしょう?
広告自動埋め込みが悪さしてるんですかねぇ

>>276
PHPのバージョンは 4.3.1 です。
output_handler の欄をみたら "no value"になってました。
0279あぼーん03/04/09 03:11ID:???
あぼーん
0280nobodyさん03/04/09 04:00ID:???
>>277
http://jp.php.net/manual/ja/language.variables.scope.php
0281nobodyさん03/04/10 18:15ID:???
要約すると、PHPはレキシカルスコープとかそういうものを
考えたことが無いような人向けの物なので気になる人は我慢してください。

ということ。
0282nobodyさん03/04/11 00:30ID:???
>>281
あほか。(w
0283nobodyさん03/04/11 02:49ID:???
あげ
0284nobodyさん03/04/11 03:07ID:???
>>281
ある意味まったく逆だな。
0285nobodyさん03/04/11 13:55ID:???
>>281
Perlはグローバル変数をサブルーチンの内部でみだりに参照することは
プログラムを、あっという間に自分でも読解不明にします。
根拠のある必要がない限り行わないでください。

すぐわかるPerl参照 
この書籍はとてもわかりやすく解説されます。
0286nobodyさん03/04/12 05:20ID:sfZex8vW
>>277
教えてクンなんだから、どんなこと言われようが我慢
しろよ。それが嫌なら自分で調べろ。

グローバル変数を自由に使えることがPerlのコードを
難解にする要素だとは思えません。
要はコーディングの仕方しだいだと思います。
くだらない比較ですが、グローバル変数に関する文法
は、Perlのほうが使いやすいと思っています。

Perlのグローバル変数とPHPのdefineで定義する定数
宣言とは、ある意味で似ていますが、これについてもPerlの
ほうがいいと感じています。

変数スコープについては、PHPは確かにとっつきにくい
ですね。後発の言語なのに洗練されていない気がします。
0287nobodyさん03/04/12 05:55ID:Nmxc4KKs
http://jbbs.shitaraba.com/computer/2100/jsweb_1.html
0288nobodyさん03/04/12 05:55ID:???
>>286
結局慣れだろ、Cを知ってればPHPの扱いは自然に思える。

> Perlのグローバル変数とPHPのdefineで定義する定数
> 宣言とは、ある意味で似ていますが、これについてもPerlの

変数と定数では全然違うって。
0289nobodyさん03/04/12 08:32ID:???
>>288
少なくとも後者は値が変わらないことが保証されるからな。
0290nobodyさん03/04/12 10:39ID:???
ユーザー関数内で変数をレキシカルにしたいのですが
どうやれば良いのかわかりません。
function abc() {
if ( ... ) {
$abc = ""; <- この変数をレキシカルにしたい。
.....;
}
}
実際のソースとは少し違いますが、簡潔に書くとこんな感じです。
0291nobodyさん03/04/12 10:54ID:???
>>290
デフォルトでローカルですが。
0292nobodyさん03/04/12 11:03ID:???
ええと、上の説明だとif文内だけで有効にしたいのです。
関数外なら出来るのですが…。
Perlのmy?みたいな風でしょうか。
0293nobodyさん03/04/12 11:09ID:???
1個の関数内で同じ変数名を使う意味が分からない。
0294キッチン排他03/04/12 13:08ID:9ZnqNoT4
fopen("hoge.txt","w")
だと、hoge.txt の中身を一度空にしてしまうから、
ファイルロックしないとデータが飛ぶ可能性があるんですよね?

って事は、
fopen("hoge.txt","a")
みたいに "a" を使えばファイルロックする必要はないって
解釈で良いのでしょうか?
0295nobodyさん03/04/12 13:13ID:???
>>294
専有ロックと共有ロックについて調べる。
0296nobodyさん03/04/12 13:24ID:???
排他ロックと言いましょう。
0297nobodyさん03/04/12 13:27ID:???
>>293
いちいち変数名を気にしなければいけない理由が分からない。
0298nobodyさん03/04/12 13:29ID:???
>>297
気にするべきです。
0299nobodyさん03/04/12 13:48ID:???
レキシカルスコープなら、変数が見える範囲を最小限にできるから、
絶対にPHPみたいな関数内でローカルな変数よりも狭くできる。

だから有利だと思うんだけど、どうかね。
0300nobodyさん03/04/12 13:54ID:???
>>299
無用な混乱が起こるに一票。
0301キッチン排他03/04/12 14:00ID:9ZnqNoT4
>>295

レスどうもです。

共有ロック
データを読み込めるが書き込めない

排他ロック
データを読み込みも書き込みも出来ない


つまり、ロックしていなければ、"a"の場合ならばファイルが空になる事はないからデータが
飛ぶって事はないけれども、同時アクセスがあった場合には、先にアクセスした方の
処理は反映されない問題が発生するって解釈で良いのでしょうか。

$fp = fopen("hoge.txt","a");
flock($fp,LOCK_SH);

は、特に意味が無いって事になりますよね?
あれ?違うかな??
ん?共有ロックを使っている場合、後からデータにアクセスした方(B)の処理は、
先にアクセスした方(A)の処理が終わってから行われるって事だと思うのですが、
(B)が読み込むデータっていうのは、(A)が書き込みを終了したデータに
なるんでしょうか?
それならば、納得がいくのですが、(B)が読み込むデータが、アクセスした時点
{(A)が書き込みをする前}のデータならロックする意味がないと思ったので。

排他ロックを使えば、どっちみち問題なしって感じがするんですが。。。
共有ロックの存在意義がないように思うのですが、どうでしょう。

#なんか日本語が変なような感じもするんですけど・・・
0302nobodyさん03/04/12 14:11ID:???
>>300
はぅ…この程度なのか。PHPユーザーって。
0303nobodyさん03/04/12 14:19ID:???
flockシステムコールなら・・・

共有ロック
同時に複数のプロセスがロックできる。

排他ロック
ある瞬間にはたったひとつのプロセスしかロックできない。

共有ロックと排他ロックは同時にかけられない。
030430303/04/12 14:20ID:???
というわけで書き込めるかどうかは関係ない。
ロックをかけようとしなければ書き込めるし。
ロックをかけようとした時に排他ロックがかけられていたら、解除されるまで待つ。
030529003/04/12 14:23ID:???
290です。
あれから色々と検索や書籍で調べてみましたが
局部的なレキシカル可の方法は書いていませんでした。
やっぱり出来ないんでしょうか…。
0306キッチン排他03/04/12 14:27ID:9ZnqNoT4
>>303
レスどうもです。

うーむ、いまいち理解できていない自分が憐れ。
今から仕事に行くので、帰って来てからまたお勉強します。

今、現在の考え。
「とりあえず、排他ロックを使えば問題ないかな。」
です。

では、これにて失礼します。
お付き合いありがとうございました。
0307nobodyさん03/04/12 14:29ID:???
>>306
そだな。何でもかんでも排他ロックすれば取りあえずは安全だ。
今度はデッドロックの恐怖に苛まれることになるが。
0308nobodyさん03/04/12 15:09ID:???
>>305
出来ないからもう調べなくていいよ。
0309nobodyさん03/04/12 15:29ID:???
>>290
PHPとPerlは同じものだと思ってるのか?
いつまでもPerlと同じ書き方すりゃ、そりゃ引っか刈る罠。おまえバカだろ。(w  
031029003/04/12 15:50ID:???
>308
そうですか、出来ないとわかっただけでもスッキリしました。

>309
私はただ、出来るのか知りたかっただけなのですが
何故、あなたがそこまで私を小馬鹿にされるのか解りかねます。
0311nobodyさん03/04/12 17:49ID:???
>>290
局所変数バカと同一人物と思われ、かつ
根本的にコーディングの問題がある事を指摘されたようですね。
がんばってください。
0312nobodyさん03/04/12 19:34ID:???
>>310
309ではありませんが、
if文のブロック内のみ有効な変数を必要とする、コーティングの仕方に問題があると思う。
perlを作っている人もmyをそのような使い方のために作ってのではないと思うけどな。
0313nobodyさん03/04/12 23:55ID:MIn0iMWR
んなあほな。最小限のスコープで記述し、妙なエラーの発生を防ぐっていうのは、近代的な方法だと思うんだけど、違うのか?意見を求む。
■ このスレッドは過去ログ倉庫に格納されています