【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
0242nobodyさん
03/04/06 21:45ID:???初心者スレなんで正確に'HTTP_REFERER'とクォートで括りたいところ。
0243nobodyさん
03/04/07 12:16ID:hoqq1ppB読み込むには、includeなどで指定しないといけないのでしょうか?
0244nobodyさん
03/04/07 13:30ID:vjvunX5Vあと、auto_prepend_file/auto_append_fileディレクティブなどで
自動的に、全部のスクリプトに対して付けちゃう事はできるけどね。
0245nobodyさん
03/04/07 19:11ID:q77L0+Ocどのようにすればいいですか?
0247nobodyさん
03/04/08 15:00ID:Fj+rJIyEありがと。includeを一つ一つのファイルで指定するのは面倒なんですよね。
auto_append_file試してみます。
0248nobodyさん
03/04/08 15:41ID:???my にあたる局所変数宣言っていうのはPHPではどうやるんでしょうか?
0249nobodyさん
03/04/08 15:51ID:AcET4E/DADDS 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?????????????????
0252nobodyさん
03/04/08 17:32ID:+i7U7kfXテーブル名が漢字で項目名も漢字のやつを表示させようとしたら
Warning: OCIStmtExecute: ORA-00911: 文字が無効です。
Warning: OCIFetch: ORA-24374: フェッチまたは実行してフェッチする前に、定義が行われていません。
とかいって怒られるのだが、漢字はだめなの?
0253nobodyさん
03/04/08 17:36ID:s/4eB37UPHPはPerlとは逆にglobal宣言しないとデフォルトで局所化された状態。
0254nobodyさん
03/04/08 18:10ID:+i7U7kfX0255nobodyさん
03/04/08 18:25ID:???sub hoge{
my $a = 'mona'
print $a;
{ my $a = 'giko' print $a;}
print $a;
}
ってPHPではどう書くんでしょ?
myを省略するだけ?
0256255
03/04/08 18:29ID:???mona giga mona って表示したいんですけど。
0257255
03/04/08 18:47ID:???function hoge(){
$a = 'mona';
echo $a;
giko();
echo $a;
}
function giko(){
$a = 'giko';
echo $a;
}
こんなメンドイことになるんでしょうか?
0260nobodyさん
03/04/08 19:11ID:???0261nobodyさん
03/04/08 20:23ID:CvB40OAjhttp://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:???http://jp.php.net/manual/ja/function.mb-eregi-replace.php
0263nobodyさん
03/04/08 23:35ID:vCzfJEVdsocket_connect ($socket, $address, $service_port);
とsocketを接続しようとすると、
Warning: socket_connect() unable to connect [111]: Connection refused
というエラーがかえってきます。
これは、文字通り、拒否されて居るんですよね・・・?
そのサイトは、ブラウザからアクセスすると普通に見られるのですが、
phpのsocket開くのとブラウザと、向こうのサイトで区別して拒否してるんでしょうか?
0264nobodyさん
03/04/08 23:36ID:vCzfJEVdブラウザで見るのとはドメインが違います。
0265nobodyさん
03/04/08 23:47ID:???存在しないのでしょうか?
0266nobodyさん
03/04/08 23:48ID:???<?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 使おう
0268sage
03/04/09 00:14ID:tMXWJMSnマルチバイト文字列とかそういう言葉(?)が出てこなかったので、
助かりました!
本当にありがとうございました。
0270263
03/04/09 00:40ID:Uzz9bVZG早速試してみました!→できました(゚∀゚)ありがd!
networkをもっと勉強する必要がありそう。。
ありがとでした〜(^^
0271nobodyさん
03/04/09 00:50ID:???http://pear.php.net/manual/ja/core.networking.net_socket.php
0273263
03/04/09 01:04ID:Uzz9bVZGあ、実はその部分の意味わからなかったんです(汗
なるほど、そういうclassがあるんですね。便利そうですね。
補足さんきうでした!
0274nobodyさん
03/04/09 01:40ID:oDK2LGgX些細なことで申し訳ないんですが、ひとつお聞きしたいことがあります。
phpinfo() で画像が表示されません。
×印になってしまいます。
なんでですか?
ソースは以下の通りです。
----------
<?php
phpinfo();
?>
----------
0275nobodyさん
03/04/09 02:01ID:???shared_htmlでる
0277nobodyさん
03/04/09 02:35ID:???PHPは本当に初心者なんだからもうちょい優しくしてくれよ
0278274
03/04/09 03:04ID:fs4GFxJpありがとうございます。確かに出ますね。
なんででしょう?
広告自動埋め込みが悪さしてるんですかねぇ
>>276
PHPのバージョンは 4.3.1 です。
output_handler の欄をみたら "no value"になってました。
0279あぼーん
03/04/09 03:11ID:???0280nobodyさん
03/04/09 04:00ID:???http://jp.php.net/manual/ja/language.variables.scope.php
0281nobodyさん
03/04/10 18:15ID:???考えたことが無いような人向けの物なので気になる人は我慢してください。
ということ。
0283nobodyさん
03/04/11 02:49ID:???0285nobodyさん
03/04/11 13:55ID:???Perlはグローバル変数をサブルーチンの内部でみだりに参照することは
プログラムを、あっという間に自分でも読解不明にします。
根拠のある必要がない限り行わないでください。
すぐわかるPerl参照
この書籍はとてもわかりやすく解説されます。
0286nobodyさん
03/04/12 05:20ID:sfZex8vW教えてクンなんだから、どんなこと言われようが我慢
しろよ。それが嫌なら自分で調べろ。
グローバル変数を自由に使えることがPerlのコードを
難解にする要素だとは思えません。
要はコーディングの仕方しだいだと思います。
くだらない比較ですが、グローバル変数に関する文法
は、Perlのほうが使いやすいと思っています。
Perlのグローバル変数とPHPのdefineで定義する定数
宣言とは、ある意味で似ていますが、これについてもPerlの
ほうがいいと感じています。
変数スコープについては、PHPは確かにとっつきにくい
ですね。後発の言語なのに洗練されていない気がします。
0287nobodyさん
03/04/12 05:55ID:Nmxc4KKs0288nobodyさん
03/04/12 05:55ID:???結局慣れだろ、Cを知ってればPHPの扱いは自然に思える。
> Perlのグローバル変数とPHPのdefineで定義する定数
> 宣言とは、ある意味で似ていますが、これについてもPerlの
変数と定数では全然違うって。
0290nobodyさん
03/04/12 10:39ID:???どうやれば良いのかわかりません。
function abc() {
if ( ... ) {
$abc = ""; <- この変数をレキシカルにしたい。
.....;
}
}
実際のソースとは少し違いますが、簡潔に書くとこんな感じです。
0292nobodyさん
03/04/12 11:03ID:???関数外なら出来るのですが…。
Perlのmy?みたいな風でしょうか。
0293nobodyさん
03/04/12 11:09ID:???0294キッチン排他
03/04/12 13:08ID:9ZnqNoT4だと、hoge.txt の中身を一度空にしてしまうから、
ファイルロックしないとデータが飛ぶ可能性があるんですよね?
って事は、
fopen("hoge.txt","a")
みたいに "a" を使えばファイルロックする必要はないって
解釈で良いのでしょうか?
0296nobodyさん
03/04/12 13:24ID:???0299nobodyさん
03/04/12 13:48ID:???絶対にPHPみたいな関数内でローカルな変数よりも狭くできる。
だから有利だと思うんだけど、どうかね。
0301キッチン排他
03/04/12 14:00ID:9ZnqNoT4レスどうもです。
共有ロック
データを読み込めるが書き込めない
排他ロック
データを読み込みも書き込みも出来ない
つまり、ロックしていなければ、"a"の場合ならばファイルが空になる事はないからデータが
飛ぶって事はないけれども、同時アクセスがあった場合には、先にアクセスした方の
処理は反映されない問題が発生するって解釈で良いのでしょうか。
$fp = fopen("hoge.txt","a");
flock($fp,LOCK_SH);
は、特に意味が無いって事になりますよね?
あれ?違うかな??
ん?共有ロックを使っている場合、後からデータにアクセスした方(B)の処理は、
先にアクセスした方(A)の処理が終わってから行われるって事だと思うのですが、
(B)が読み込むデータっていうのは、(A)が書き込みを終了したデータに
なるんでしょうか?
それならば、納得がいくのですが、(B)が読み込むデータが、アクセスした時点
{(A)が書き込みをする前}のデータならロックする意味がないと思ったので。
排他ロックを使えば、どっちみち問題なしって感じがするんですが。。。
共有ロックの存在意義がないように思うのですが、どうでしょう。
#なんか日本語が変なような感じもするんですけど・・・
0303nobodyさん
03/04/12 14:19ID:???共有ロック
同時に複数のプロセスがロックできる。
排他ロック
ある瞬間にはたったひとつのプロセスしかロックできない。
共有ロックと排他ロックは同時にかけられない。
0304303
03/04/12 14:20ID:???ロックをかけようとしなければ書き込めるし。
ロックをかけようとした時に排他ロックがかけられていたら、解除されるまで待つ。
0305290
03/04/12 14:23ID:???あれから色々と検索や書籍で調べてみましたが
局部的なレキシカル可の方法は書いていませんでした。
やっぱり出来ないんでしょうか…。
0306キッチン排他
03/04/12 14:27ID:9ZnqNoT4レスどうもです。
うーむ、いまいち理解できていない自分が憐れ。
今から仕事に行くので、帰って来てからまたお勉強します。
今、現在の考え。
「とりあえず、排他ロックを使えば問題ないかな。」
です。
では、これにて失礼します。
お付き合いありがとうございました。
0309nobodyさん
03/04/12 15:29ID:???PHPとPerlは同じものだと思ってるのか?
いつまでもPerlと同じ書き方すりゃ、そりゃ引っか刈る罠。おまえバカだろ。(w
0310290
03/04/12 15:50ID:???そうですか、出来ないとわかっただけでもスッキリしました。
>309
私はただ、出来るのか知りたかっただけなのですが
何故、あなたがそこまで私を小馬鹿にされるのか解りかねます。
0312nobodyさん
03/04/12 19:34ID:???309ではありませんが、
if文のブロック内のみ有効な変数を必要とする、コーティングの仕方に問題があると思う。
perlを作っている人もmyをそのような使い方のために作ってのではないと思うけどな。
0313nobodyさん
03/04/12 23:55ID:MIn0iMWR0314nobodyさん
03/04/13 00:06ID:???もちろんiとかaとかわけのわからん短い名前をつけたり、複数の目的に使ったりするのは御法度だけど。
0315nobodyさん
03/04/13 00:34ID:???バカにあほといわれた。
ところで、宣言しない限りグローバル変数になってしまうperlが持つレキシカルスコープという
概念を持った処理系って他にあるの?
0316nobodyさん
03/04/13 00:38ID:???0317nobodyさん
03/04/13 00:40ID:???0319nobodyさん
03/04/13 04:28ID:???C++とかJavaとかは
if(hoge)
{
int a;
}
とかするとaは自分の生まれたブロックとその子孫ブロックでのみで生きられる。
0322nobodyさん
03/04/13 18:22ID:???Part8立てようと思ったけど、ホスト規制で立てられなかったので
誰か親切でエロイ人立ててください。
おながいします。
↓現行スレ
【PHP】質問スレッド Part7
http://pc2.2ch.net/test/read.cgi/php/1044478561/l50
0325nobodyさん
03/04/13 20:37ID:???0326nobodyさん
03/04/14 00:55ID:???【PHP】質問スレッド Part8
http://pc2.2ch.net/test/read.cgi/php/1050249148/
0328キッチン排他@職場
03/04/14 02:39ID:nGNbFDFK卵が先か鶏が先かって状態ですよね?
今の所、そんな複雑なスクリプトを書くスキルがないので、デッドロックで
困った時に、困る事にします。
ところでファイルロックについて更に質問なのですが、
$fp = fopen($filename,"a");
ならばロックした方が良いって思うのですが、
$file = file($filename);
とかの場合もロックした方が良いのでしょうか?
今作ってるスクリプトが、おおまかな流れとして以下のような感じなのです。
1. file()関数で現在あるデータを配列に代入
2. foreach()関数でpostされたデータと現在あるデータを照合
3. なければfopen()関数で開いて排他ロック
4. fputs()関数で書き込んでから、ロック解除してクローズ
やはりfile()関数を使った直後にロックを掛けた方が良いのでしょうか?
0329キッチン排他@職場
03/04/14 02:47ID:nGNbFDFKって事は、file()関数の直後でロックする事自体ムリって事ですか・・・
マニュアルちゃんと嫁ですね。
すいません。
0330nobodyさん
03/04/14 03:31ID:???で、その例だと重い処理やユーザが多い場合トラブる。
Aがデータ読む→Bもデータを読む→Aがデータ更新→Bもデータ更新
の時、BはAによる変更がなされていない古いデータを参照、処理している事になる。
fopen→施錠→読む・処理・書き込み→close が正解。
開錠は?と思ったなら手元の本のロック関係の項目を読み返せ。
0331キッチン排他@職場
03/04/14 04:52ID:nGNbFDFKレスどうもです。
> 開錠は?と思ったなら手元の本のロック関係の項目を読み返せ。
実はまだPHPの本を持ってないんです。(webだけでなんとかやってるんですが)
近い内に、一冊PHP本を買ってみます。
修正前と修正後のソースを晒してみます。
[before]
http://www.kari.to/upload/source/d/1444.txt
[after]
http://www.kari.to/upload/source/d/1443.txt
こんな感じになってますが、ヤバイでしょうか?
0333nobodyさん
03/04/14 11:19ID:f50BSraCchomd関数だとどうやらファイルしか扱えないみたいだし、mkdir関数は既存
のディレクトリに対してしかパーミッションの設定が聞かないようなので。
やりたいことは、ファイルのアップロード時に一時的にディレクトリのパーミッションを変更し、
アップが終了したら元に戻すってことです。環境はredhat Apache php4.3.1です。
0334nobodyさん
03/04/14 11:21ID:???ファイルをオープンしながらその中でいろいろ処理しつつ、
ファイルに書き込んでいくなんて処理はまずいかな?
例えば親記事に返信できる掲示板とかで、
・listでログを配列に全部読み込む。
・wでログファイルオープン
・forで配列をまわす。
・すでにあるログ書き込み。
・返信の親記事発見。
・いろいろと処理(置換したり、入れ替えたり)して親記事と子記事書き込み。
・残り書き込み
・close
こういう場合は予め配列操作しておいた後で、一気に書き込んだ方が
いいのかな?
0335動画直リン
03/04/14 11:45ID:ri8n5kTm0336キッチン排他
03/04/14 16:04ID:kFyvhyAaレスどうもです。
http://www.kari.to/upload/source/d/1445.txt
クローズしてからメール送信するようにしました。
postされたデータ(A)と現在あるデータ(B)を照合して、BにAがある場合は
エラーを表示させてBにAを反映させず、BにAがない場合は、BにAを追加して
メールを送るというのがやりたかったのですが、やりたい事は出来ました。
施錠・開錠の位置は、これで問題ないのでしょうか?
それと、ちゃんとロックされているかの確認って皆さんどうされてるのでしょうか?
>>333
1.一時的にディレクトリを作って、その中にアップロード
2.アップ完了したら、ファイルを任意のディレクトリへ移動
3.1.で作ったディレクトリを削除
ってのはどうでしょう?
スマートじゃないし、PHP始めたばかりの人間の戯言なので的外れなレスを
返しているかもしれませんが・・・
既存のディレクトリのパーミッションを変える関数があったらごめんなさい。
0337nobodyさん
03/04/14 16:17ID:R0bR1Nwj0338nobodyさん
03/04/15 08:49ID:???同じ変数名を使うことを前提としているかどうかだと思うんだが。
また、変数を定義する順番も。
仮にスベテのブロック内でスコープが適用されるとしても、
$hoge = NULL;
function foo(){
if (true) {
}
}
という形の時に、if内に$hogeという局所変数を追加するような書き方
(たぶん>>293の書き込みがあったから、
こういう書き方をしたいと思ってると決めつけてるんだと思うが)
をするのは問題外だが、
function foo(){
if (true) {
$hoge =256;
}
}
というような形が先にあった場合、
$hogeのスコープを最小限に出来れば、
今後foo()内にスコープを持つ変数や
グローバルスコープの変数を追加する時に、
"うっかり"名前が重複してエラーになる可能性は低くなる。
特に複数人で開発を行う場合はありえない事ではない。
(もちろん注意して、重複しないようにするのが好ましいが)
0339nobodyさん
03/04/15 18:01ID:???0340nobodyさん
03/04/16 00:54ID:???>グローバルスコープの変数を追加する時に
>複数人で開発を行う場合はありえない事ではない
関数名が重複しないように悩むことはあっても、
ローカル変数が把握できなくて悩んだことはないね。
それに、関数内に追加したくなるglobal変数なら全員把握するもんでは ?
大体、何のために関数化しているの ? php の開発が特殊なのかな...
0341nobodyさん
03/04/16 01:18ID:???>大体、何のために関数化しているの ? php の開発が特殊なのかな...
複数人で作業を分担すると、個々の能力が違うわけで
開発規模が大きくなればなるほど、いびつなコードになっていく…ことがあった。
■ このスレッドは過去ログ倉庫に格納されています