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

【PHP】質問スレッドpart31【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/11/27(日) 00:07:12ID:eBvjdczp
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。

過去スレ、関連リンク、FAQ等>>2-10辺り
0085822005/11/28(月) 18:10:34ID:???
>>84
おほ
商用利用もフリーなのか
ちょっくら調べてみますありがd
0086772005/11/28(月) 19:15:10ID:???
お返事ありがとう^^
スタイルシートが手軽そうですが、PDFだとカコイイですね。
とりあえずPDF関連は知識がないので、
CSSで作成後、随時PDFにチャレンジしていこうかとおもいます。
0087nobodyさん2005/11/29(火) 07:03:16ID:???
アップロードしたファイルにidを持たせ『aのファイルはid=1を持っているのでtest.php?id=1でダウソ』できるようにしたいのですがMysqlでidは書き込んだ順に1づつ上がるようにしたんですがファイルにとなるとわかりません。
どうかご教授ください。
お願いします。
0088nobodyさん2005/11/29(火) 07:05:16ID:???
>>87
最大値を保持するテキストファイルでも作れば?
0089nobodyさん2005/11/29(火) 07:48:29ID:gl3Jq/2L
>>88
MySQLでやれよ(w
MySQLあるのにテキストファイルって。。。
0090nobodyさん2005/11/29(火) 08:00:13ID:???
>>87
MySQLで発行したidをファイルに付けるだけのことなんじゃ・・・
0091nobodyさん2005/11/29(火) 08:42:59ID:???
要はシーケンスの使い方がわからないってことじゃ?
MySQLは使ったことないけど、確かautoとかをカラム名の前に
つけるんじゃなかったっけ?
0092nobodyさん2005/11/29(火) 08:43:37ID:???
>>89
たったそれだけのことにMySQLを稼動させるのもw
0093nobodyさん2005/11/29(火) 08:46:50ID:???
一応、テキストファイルを使った最適な方法をば。

flock 後、ファイルを上書きモードで開き、
格納されてる数値を読み取った後、先頭にseekしてインクリメントした数値を書き入れる。
0094nobodyさん2005/11/29(火) 08:49:05ID:???
工工エエエエ(゚д゚;)エエエエ工工
0095nobodyさん2005/11/29(火) 08:59:09ID:???
>>94
ゑ?
0096nobodyさん2005/11/29(火) 09:03:09ID:gl3Jq/2L
>>92
テキストファイル読む方が遅いだろう。
SQL発行する方が速いし。

>>93
flockしたまま終了しちゃってるとか、seekできなかったとか、書けなかったとか、例外処理がいろいろ面倒だけどね。
0097nobodyさん2005/11/29(火) 09:14:19ID:???
ファイルのパス、ファイル名をレコードに持っておけばいいだけのような

番号をテキストファイルで管理するのは、シングルクライアントだと言い切れるならいいかもしれんが...
0098nobodyさん2005/11/29(火) 09:16:00ID:???
常識人はお呼びでないよ
0099nobodyさん2005/11/29(火) 09:30:46ID:???
>>87
ディレクトリの中のファイル一覧を作成して、その中で最大数となるファイル名(数字)に
+1して行くしかないよ。仮にMySQLで発行されるIDと関連付けるならmysql_insert_id();
で新規追加されたIDを拾得してそれをファイル名に使えばOK。
0100nobodyさん2005/11/29(火) 09:38:42ID:???
同時アクセスがあったときにインクリメントだけでファイルの名前付けやってると
同名ファイルでかち合ったりしないかと危惧しているのですよ

ファイルのまんまバイナリでDB放り込むってのもアリではないですかと
0101nobodyさん2005/11/29(火) 10:37:45ID:???
>>100
そこまで読むかww
0102nobodyさん2005/11/29(火) 11:07:17ID:???
そこまで考えるなら、ロック用ファイルを最初から最後までロック。
0103nobodyさん2005/11/29(火) 11:18:43ID:???
>>96
flockはプロセス終了で自動的に解除じゃないっけ?

>>100
flockだけの単純な構造でも、同時アクセスでもかちあったりはしないよ。
連続でflockを囲んで1000回ファイルをアクセスを繰り返すスクリプトを、複数ブラウザから同時に起動させても、
ちゃんとカウントは ブラウザ枚数×1000 になる。
0104nobodyさん2005/11/29(火) 11:23:27ID:???
ていうか、うpろだを作るなら、ページ読み込みごとにフォルダ内検索でもあるまいし、
うpされているファイルのレコードを作成しておくのが自然だから、
(うptime, REMOTE_ADDR、オリジナルファイル名、ファイルサイズ、ファイル種別、等)
それでもって極めて普通に1レコード作ればいいんじゃ。
IDはシーケンス。
01051042005/11/29(火) 11:39:40ID:???
スマソ質問の意味を勘違いしていた。

とりあえず、UNIQ_IDでファイル名を保存しておいて、MySQLにインサートした後IDを取り出し、
それでもってファイル名を変更する。
でいいんじゃないかな?
0106nobodyさん2005/11/29(火) 12:11:28ID:???
キーフィールドを「auto_increment」にして、
ファイル名をuniqidで振りなおしてから管理しとけばいいんじゃねぇの?
0107nobodyさん2005/11/29(火) 12:14:13ID:???
PHPの質問マダァ?
0108nobodyさん2005/11/29(火) 14:38:43ID:???
んでは期待に沿ってPHPのちつもんです。

わたくし、PHP3国際化版にて日本語文字対応の掲示板を作成したことがあります。
さて、季節もうつろい、現在は国際化PHPというのではなく、JSTRINGというので日本語を対応していると聞きます。
ただ、JSTRINGという名詞しか知らないので、これからやろうとする私に、
よくわかるようにおしえていただけませんか?
0109nobodyさん2005/11/29(火) 15:05:44ID:???
膣門
0110nobodyさん2005/11/29(火) 15:18:42ID:oXQKlnSf
ファイルの先頭に追記したいんですがどうしたらいいですか?
一度ファイルの内容を退避して、新データ+退避データを全部書き込まなければいけないんでしょうか?
それだと時間かかるし、ファイルの最後に追記すると、出力するときにデータを最後まで読まなければいけないんで、
なんかいい方法plz!
0111nobodyさん2005/11/29(火) 15:19:39ID:???
これもFAQに入れといたほうがいいんじゃねーの
0112nobodyさん2005/11/29(火) 15:20:34ID:???
>>110
ファイルアクセスってそういうもんだよ
うまい方法なんてないよ
データベースでも使えよ
0113nobodyさん2005/11/29(火) 15:35:51ID:???
>>110
> 時間かかるし

実際、時間掛かったんでしょうか?
0114nobodyさん2005/11/29(火) 15:36:05ID:???
>>108
PHP4+でmbstring使ってください。

>>110
ファイルの先頭に挿入するには全体を書き換えるしかない
あ、末尾に追加する方で最後のデータの位置(ftellの返り値)だけ別のとこに保存しとく手もあるか。
サイトの規模や内容をよく吟味して決めてくれ。(読み込みが多いか書き込みが多いかとか)
多くの場合>>112の言うようにDB使えば無問題だけどね。

>>111
たしかにそうかも。
0115nobodyさん2005/11/29(火) 16:14:09ID:???
>>110
安全のため、別ファイルを新規作成しそれに書き込み、完了後前ファイルを消すなりRenameしてばくあっぷとるなりして、
新たに作成されたファイルをRename。

ここまで、最初にファイルを開く前からロックファイルを使うなりしておく。
0116nobodyさん2005/11/29(火) 17:04:57ID:???
fseekでファイルポインタを末尾(もしくは末尾付近)に移動してから読み込む
0117nobodyさん2005/11/29(火) 18:29:12ID:???
Pukiwikiみたいに/?○みたいな引数を受け取るにはどうすればいいですか?
0118nobodyさん2005/11/29(火) 18:31:11ID:???
くえりーすとりんぐ♥
0119nobodyさん2005/11/29(火) 20:06:04ID:???
ぱすいんふぉちゃうんかと
0120nobodyさん2005/11/29(火) 20:48:39ID:???
げっと
0121nobodyさん2005/11/30(水) 04:53:39ID:???
ちょっと>>110さんの質問と似ていますが・・
ファイルの途中一行だけを書き換える場合も同じ方法になるんですよね?
ttp://ns1.php.gr.jp/pipermail/php-users/2004-February/020845.html
ここの
>修正対象行以外に用はないので、1行読み込んだらすぐに書き出し、
>修正対象行は修正後に書き出すようにすれば、バッファは 1行分で済みます。
って、どういうことなんでしょうか?
色々考えたんですが、さっぱり・・・
0122nobodyさん2005/11/30(水) 05:40:48ID:???
>>121
file()とかfile_get_contents()で全部一気に読まず、fgets()とかで一行ずつ読んですぐ書き出せってことでしょ。
その時に元のファイル(読み用)と書き出し先ファイルの名前をどちらか一時的に変えて、全てが終わったら一時ファイルを削除って形にしなきゃいかんわな。
まあfile()のほうが楽だし、よほど重大な問題(ファイルがデカすぎ→メモリ使いすぎ、とか)を引き起こさない限りは丸ごと読み込んだって大したことないと思うけどね。
さらに言えば、file()じゃまずいほどのデータを扱う規模ならDB使うべきだと思うし。
0123nobodyさん2005/11/30(水) 07:10:29ID:???
レン鯖だとDB使えない、もしくは、一つしか作成出来ないとか言う弊害あったりするから、まぁ仕方ないよ。うん。
01241212005/11/30(水) 10:09:06ID:???
レスありがとうございました。
何か気持ち悪いけど、file()で行きます。
0125nobodyさん2005/11/30(水) 11:28:35ID:???
file()関数で共有ロックとかしてくれりゃーいいのにな。
0126nobodyさん2005/11/30(水) 12:14:52ID:???
>>125
複数ファイルの整合性のためにも、file()より大きな枠でflockがあるから役立つ。
0127nobodyさん2005/11/30(水) 12:30:28ID:???
>>125
file()単独でロックしてもしょうがないじゃん
0128nobodyさん2005/11/30(水) 20:33:11ID:LTeKbaFs
あげ
0129nobodyさん2005/12/01(木) 09:52:22ID:r3P18a2X
requireしてるファイルとかの関係をツリー上に表示できたり
するツールってあったら教えてもらえませんか?

あと、みなさん、開発時に便利だと思ってるツールがあれば
教えてください。<m(_)m>
テキストエディタだけで開発してますが、なんかいいのがあったら
使ってみたいのでー
0130nobodyさん2005/12/01(木) 09:55:14ID:???
おれはデザインもしてるからDreamWeaver必須だな
0131nobodyさん2005/12/01(木) 10:03:37ID:???
vim。
マウス不要で手が疲れにくい。マジ最強!
0132nobodyさん2005/12/01(木) 10:10:21ID:???
>>130
デザ上がり?
0133nobodyさん2005/12/01(木) 10:20:05ID:???
vimとかemacsとかって使いこなせるようになるまでが大変そうだね。
おれはEclipse。
0134nobodyさん2005/12/01(木) 10:23:56ID:???
edlin
0135nobodyさん2005/12/01(木) 10:26:05ID:???
>>129
phpDocumentorじゃ力不足かな?
requireだと引数に変数渡せたり、include_pathがまちまちだったり、PHP5だと__autoloadとかあるからちと厳しそうだね。
引数が変数でないもの限定とかならCLIでささっと書けるんじゃないかな。
あとgrepでも(ツリー上にはできないけど)ある程度抽出できると思う。
0136nobodyさん2005/12/01(木) 10:46:56ID:???
>>132
んにゃ
ネットワークエンジニア→webPG→鯖管&ヘルプデスク→windowsappPG→webデザイン→何でも屋(泣

こうして何でも屋さんのできあがり
01371292005/12/01(木) 12:21:46ID:dlWTNPt6
>>135
あ、ちょっとよさそうすね。
人のプログラムおっかけるのに、苦労してて、ツリー上に表示できるのが
あると便利だなーと思いまして。
Eclipseとかでできると楽なんですけどね。
0138nobodyさん2005/12/01(木) 13:17:38ID:???
php4とphp5が共存している環境で、明示的にphp5を使用する方法は無いのでしょうか?
0139nobodyさん2005/12/01(木) 13:26:30ID:???
#!/usr/local/bin/php5
0140nobodyさん2005/12/01(木) 13:27:18ID:???
>>138
明示的にphp5を使用する方法が無い場合は、共存してるって言わないと思うよ。
その共存環境を作った人に聞いてみ。
0141nobodyさん2005/12/01(木) 13:43:00ID:???
>>138
拡張子かスクリプトを置くディレクトリでキックするPHPを分ける。
CGI版の最初の1行目パスで切り替えてもいいけどね。
0142nobodyさん2005/12/01(木) 13:44:20ID:???
あ、あとWebサーバ分けて別ポートで運用して
リクエストするポートで切り替える手もあるな。
運用テストに良く使う
0143nobodyさん2005/12/01(木) 13:49:26ID:???
>>138
拡張子だね。
私は昔、php3なら国際化PHP3、phpならphp4となるようにしてた。
たしか、Apacheのhttpd.confで設定したかもしれない。
01441382005/12/01(木) 13:54:14ID:???
みなさんどうもありがとうございます
0145nobodyさん2005/12/01(木) 15:07:47ID:iXMXSlHn
ファイルを開いて特定の文字を置き換えたいのですが、うまくいきません。

$newfile = "./somefile.html";
$ddr = fopen("$newfile", 'w');
$adr = strtr($ddr, "夏 ", "冬");
fwrite($ddr, $adr);

これを実行するとsomefile.htmlの中には Resource id #3 
という文字だけになって、元あった文字も無くなってしまいます。
特定の文字だけを置き換えて上書きするにはどうしたらよいでしょうか。
よろしくお願いします

0146nobodyさん2005/12/01(木) 15:14:30ID:???
>>145
> $adr = strtr($ddr, "夏 ", "冬");
この辺りの関数の使い方(つーより理解?)がおかしい。

スレの上の方でファイルの書き換えの話をやってるから、みてごらん。
0147nobodyさん2005/12/01(木) 15:20:15ID:???
>>145
マニュアル読んでーっ!!!!

$newfile = "./somefile.html";
$ddr = file_get_contents($newfile);
$adr = strtr($ddr, "夏 ", "冬");
file_put_contents($newfile, $adr);
01481452005/12/01(木) 16:50:50ID:???
レスありがとうございます!
>>147で試してみましたが関係のない文字が
変な風に変換されるだけでした。
(ひらがなの ”と” が ”め” になったり、”夏”が”冏”になったり)
文章を長くしたり短くしたりしても駄目でした
0149nobodyさん2005/12/01(木) 17:05:53ID:???
>>148
http://www.php.net/strtr
http://www.php.net/str_replace
http://www.php.net/preg_replace
0150nobodyさん2005/12/01(木) 17:12:23ID:???
>>149
つーか、mb_eregじゃねーのか?
0151nobodyさん2005/12/01(木) 17:12:53ID:???
>>150
あっ、mb_ereg_replaceな
0152nobodyさん2005/12/01(木) 17:18:48ID:???
まあstr_replaceかな
0153nobodyさん2005/12/01(木) 17:24:25ID:???
>>148
つ[マルチバイト関数]
01541452005/12/01(木) 18:44:46ID:???
<?php
$newfile = "somefile.html";
$ddr = file_get_contents($newfile);
$adr = mb_ereg_replace("秋", "冬", $ddr);
file_put_contents($newfile, $adr);
?>
strtr,str_replace,も試してみたのですが、
英語⇔英語は置き換えできても、
日本語⇔英語、日本語⇔日本語はできませんでした。
環境からまた見直してみます。皆さんありがとうございました。
0155nobodyさん2005/12/01(木) 18:48:33ID:???
>>154
mb関係の設定はどうなっているんだ?
サーバーの文字コードとファイルの文字コードとかは?
01561452005/12/01(木) 19:05:41ID:???
>>155
文字コードでできました!
EUC-JPで保存してたつもりがUTF-8でした・・・
超凡ミス・・・・
皆さんのおかげでできました!本当にありがとうございました!
0157nobodyさん2005/12/01(木) 19:27:18ID:???
>>154
一応排他処理しないと
0158nobodyさん2005/12/01(木) 19:58:27ID:???
file_put_contentsって5からだったと思うから使う環境の事も考えないとダメだよ
0159nobodyさん2005/12/01(木) 20:10:02ID:mUwPwikL
CURL関数を使いたいのですが、上手くいきません。

$host = "http://www.hogehoge.com";
$ch = curl_init( $host );

curl_setopt( $ch, CURLOPT_HEADER, 1 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 0 );
curl_setopt( $ch, CURLOPT_FAILONERROR, 1 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $this->m_timout );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $head );

$result = curl_exex($ch);
$err = curl_error($ch);

で、$resultには何も返ってきません。
$err には「Couldn't resolve host 'www.hogehoge.com''」 というメッセージが返ってきます。
しかし、コンソールで
curl -I http://www.hogehoge.com
を実行した場合には正常に名前解決もでき、正常な結果も返ってきます。

PHPのCURL関数を使用した場合だけ名前解決ができていないようなのですが、
どうすればいいのか途方にくれています。
よろしくお願いします。
0160nobodyさん2005/12/01(木) 20:12:28ID:???
追記です。

$this->m_timout の値は120を指定しています。
0161nobodyさん2005/12/01(木) 21:27:37ID:???
突然の質問ですいません。。。。
http://fooos.com/のようなメールのcgiを知りませんか?
0162nobodyさん2005/12/01(木) 21:46:55ID:cg4HP1lw
質問です
pyaというサイトをにもありますが、
良い 悪い を評価するボタンを設置するにはどうすればいいですか?
0163nobodyさん2005/12/01(木) 21:54:56ID:???
みんな、日本語は正しく使おうね。
01641622005/12/01(木) 22:01:12ID:???
>pyaというサイトをにもありますが、
正しくは
>pyaというサイトにもありますが、
でした。。
0165nobodyさん2005/12/01(木) 22:03:43ID:???
>>164
そういうスクリプトを探すなり、自分で書くなりすればいいだけですよ。
そのpyaとやらのサイトもそうやって作られたものです。
0166nobodyさん2005/12/02(金) 00:06:46ID:???
IPv6の設定がらみで取れんことがあったな...
PHPでcheckdnsrr()とかgethostbyname()で引いたときにIPが取れる?

01671662005/12/02(金) 00:07:26ID:???
>>159

0168nobodyさん2005/12/02(金) 04:43:38ID:FIP91xbi
xampp/windowsのphp5を、5.1.1にリプレースしたところ、
browscap.iniが読めないと言われました。
初耳だったので検索したところ、
ブラウザ情報の設定ファイルとのことなので、
http://jp.php.net/manual/ja/faq.obtaining.php#faq.obtaining.browscap
ここにかかれたURLからダウンロードして設置しましたが、
360行でパースエラーが出ます。
どうすれば解決できますか?
0169nobodyさん2005/12/02(金) 08:49:34ID:???
mailtoのアンカーを押すと同時に、
違うページに飛ぶには、
どうしたらよいでしょうか?
0170nobodyさん2005/12/02(金) 08:56:15ID:???
>>169
JavaScript を使うがいいさ
0171nobodyさん2005/12/02(金) 08:57:09ID:rQNTnY5j
>>168
エラーをコピペ汁!
漏れの所では問題ない。

>>169
ブラウザ依存。PHPでmailtoの挙動なんて指定できないよ。
01721692005/12/02(金) 08:57:48ID:???
>>170
ありがとうございます。

携帯電話でも、使えるようにしたいため、
Javascriptは使えません。

よろしくお願いします。
0173nobodyさん2005/12/02(金) 08:58:52ID:???
>>169
onclick('document.href=スレ違い')
0174nobodyさん2005/12/02(金) 09:04:47ID:???
>>172
メール送信フォームでも使っとけ。
嫌ならスレ違いだ、どっかいけ
01751692005/12/02(金) 09:27:40ID:???
>>173 >>174
ありがとうございます。
どうも、無理みたいですね。
0176nobodyさん2005/12/02(金) 09:44:04ID:???
mailtoじゃなくて普通のアンカーでページ飛んじゃだめなのか?
0177nobodyさん2005/12/02(金) 10:25:34ID:???
5.1.1出るの早過ぎw
0178nobodyさん2005/12/02(金) 10:32:29ID:???
>>169
そもそもボウヤは、「何を実現したいのか」を書いた方がいい。
0179nobodyさん2005/12/02(金) 10:38:11ID:???
>>178

夢を実現したいんです!!
0180nobodyさん2005/12/02(金) 10:39:20ID:???
>>179
それならスレ違い、いや板違いかw
01811692005/12/02(金) 11:35:20ID:???
メーラーにmailtoで、to と subjectを
送った時点で、
ありがとうございました。等を
表示させたいんです。
携帯電話で利用したいので、
Javascriptは使えないんです。
0182nobodyさん2005/12/02(金) 11:43:22ID:???
>>181
立ち上げたメーラーが、実際メールを送ったかどうかを判断できないのでそもそも仕様から不可能。
(メール送らずにメーラー閉じたりする場合もあるから)
0183nobodyさん2005/12/02(金) 11:44:11ID:???
>>181
俺の携帯はmailtoすると元のページにすら戻らないからどっちにしても関係ないや
01841692005/12/02(金) 11:45:10ID:???
>>182 さん
ありがとうございます。

ただ、そのリンクもしくはフォームをクリックした時点で、
切り替わってくれれば、問題ないのですが、
それも、不可能ですか?
0185nobodyさん2005/12/02(金) 11:48:25ID:???
>>181
JavaScript使えないんじゃ無理っぽいね。
つかmailto使わずに、自分でメール用のフォーム作ってPHP側でメール送信するようにすれば目的としていることはできると思うよ。
■ このスレッドは過去ログ倉庫に格納されています