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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん04/08/27 18:00ID:???
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4
0809nobodyさん04/09/13 01:00:28ID:???
>>808
ソースコードから慣例読め
0810nobodyさん04/09/13 01:01:34ID:???
$str="あい";
$str=mb_convert_encoding($str,"JIS","euc-jp");
$str=bin2hex($str);
$str=substr($str,6,8);
print($str);
0811nobodyさん04/09/13 01:05:29ID:???
>>810

$str="あい";
$str=mb_convert_encoding($str,"JIS","SJIS");
$str=substr($str,3,4);
$str=bin2hex($str);
print($str);

のほうがちょっといいカモ
0812shinji04/09/13 01:07:43ID:3IjiBAgs
>>800
>>810
まいど!ほんまに助かりました。PHPがはじめてでその上日本語の文字コードについてぜんぜんわからへんからいろいろすまへん。多分これで解決できたと思う。
0813nobodyさん04/09/13 01:11:36ID:???
>>808
漏れはbin2hex();じゃないに10グラタンw
Devドキュメントはあるけどオフィシャルとなるとちょっと。
CSV追っかけてる人たちの間でも微妙と思われ。
問題があればMLのほうでやったほうがいいかも
#既出にはくれぐれもご注意
0814nobodyさん04/09/13 01:14:53ID:???
ESAは月にシェルターつくるんだって。
月基地で着用されるコスチュームのアイディアを募集してるぞ。
うさぎの絵を書いて送ろう。 [email protected]
0815nobodyさん04/09/13 01:22:50ID:???
$str="あいうeo";
$len=strlen($str);
$str=mb_convert_encoding($str,"JIS");
$str=bin2hex($str);
$str=str_replace(array("1b2442","1b2842"),"",$str);
print($str);
これなら全角4桁ASCII2桁で使える。
0816nobodyさん04/09/13 01:25:01ID:???
>>806 >>809
泣きそうになった
0817nobodyさん04/09/13 01:28:54ID:???
>>814
ビミョーなこと云うな。
0818nobodyさん04/09/13 02:38:52ID:???
>>808
Cって素敵やん?
081978304/09/13 04:44:25ID:8a1krxrn
しかたないのでとりあえずphp4で作り始めました
Singletonを実現したいのですが
staticを何とかスマートに実現する方法はないものでしょうか?
0820nobodyさん04/09/13 07:43:02ID:???
携帯から画像アップさせたいのですが
PHPではどのようにやったらいいのでしょうか?
0821軟式PHP04/09/13 08:01:50ID:???
vofafoneならHTMLのフォームのtype=fileでいけるし、
その他のやつなら添付メールを送らせて、マルチパートから吸い出して
アップする。
082282004/09/13 08:09:04ID:???
マルチパートから吸い出して
アップする。
この部分がよくわかりません。。
やり方を多少おしえていただけないでしょうか
お願いします。
0823nobodyさん04/09/13 08:57:15ID:???
デザインパターンのスレがあったので見てみたら
やっぱりphpとsingletonの相性の悪さには皆さん悩んでる様子。
ひとまずグローバル変数で代用させておくのが、
将来的なphp5への置き換えを考えると良さそうですね。
0824軟式PHP04/09/13 09:45:34ID:???
>>822
まずサーバー側に届いたメールを処理しないといけないんだけど
IMAP経由で調べたり、qmailをキックしたり色々あるわけなのです。
IMAPを使うならimap_fetchstructure辺りを使うとすぐ取り出せるよ。
PEAR使ったらもっと簡単に出来るかも(↓検索したら出てきた
>>http://ns1.php.gr.jp/pipermail/php-users/2003-July/017157.html
0825nobodyさん04/09/13 15:05:12ID:???
すいませんが、どなたか教えていただけませんでしょうか。

PHPでtrigger_error()+set_error_handler() +自作関数でエラーハンドリングをしています。

set_error_handler("error_handler");

$fp = fopen($CONFIG_DIR . $filename, "r");

if ($fp==false){
 trigger_error("aaaa", E_USER_ERROR);

この場合、trigger_errorの第一引数として指定した
Stringをset_error_handlerで設定している
error_handler関数に渡してやることはできませんでしょうか?
0826nobodyさん04/09/13 22:18:57ID:???
PHPでクラスを作ると$thisを一杯書かなければなりませんが、
あれはPHP4でもPHP5でも$this->の部分を省略するような方法は無いのですか?
0827nobodyさん04/09/13 22:29:58ID:???
define使えば?
0828nobodyさん04/09/13 22:37:21ID:???
教えてください。
一連の流れのある時点(ログアウト機能など)で
セッションIDを変更したいのですが
どうやったらいいのでしょうか?

session_regenerate_id()
だとそのスクリプト内では変更されますが
他のページに遷移すると元のセッションIDに
戻ってしまうようです。。。
0829nobodyさん04/09/13 22:44:36ID:???
TeXのコードから数式をイメージとして出力してくれるような
PHPライブラリを探しています。もしご存じでしたら教えてください。
0830nobodyさん04/09/13 22:56:25ID:???
いみがわかんなーい
ログアウトのときはセッション破棄したらいいじゃん
083182804/09/13 23:01:57ID:???
>>830
その方法が知りたい

session_unset
session_destroy
いろいろ試したけど
セッションIDが変わってくれなくて。
0832nobodyさん04/09/13 23:26:50ID:l1R4r/Pa
失礼します。
MySQLとPHPを勉強しながら、ゲームの攻略サイトを作ろうと思ってます。
http://cgi.f56.aaacafe.ne.jp/~megaten/test2.php
とりあえずデータを入れて、検索結果が表示されるようにはなったんですが
検索結果がちょっとおかしくなり、悩んでます。

具体的には、
「エンジェル」で検索すると正しい検索結果が表示されますが、
「エ」で検索すると明らかに該当文字(「エ」)が入っていない文字列までhitしてしまいます。
また、「ソ」に至っては一件だけ該当データがあるはずなのですが、hitしません。
stripslashesをつけてもはずしても、結果は同じでした。
文字のエンコードはphpMyAdmin側、PHP側共にShift_JISにしてあります。
わかる方いらっしゃいましたら、ご教授宜しくお願いしますm(_ _)m
0833nobodyさん04/09/13 23:35:00ID:???
>>831
session_unsetのあと
session_startやればID変わるはずだけど
0834nobodyさん04/09/13 23:42:02ID:???
>>832
普通、全部EUCでやるよ
0835nobodyさん04/09/13 23:44:40ID:???
>>829
TeXじゃないけどgif生成するのはどっかにあった気がするが思い出せないな。
083683204/09/13 23:49:33ID:l1R4r/Pa
>>834
レスありがとうございます。
確かにどのサイト見てもPerl、PHPはeuc_jpでやれって書いてありますね…
>>832の不具合も、やはりそれに起因するものなんでしょうか?
0837nobodyさん04/09/14 00:00:52ID:???
質問があるのですが、LAN内の「PC-A(WinXP)」Apache・PHPで
ドライブの空き容量を表示するようにしたいのです。
ローカルのドライブは表示できたのですが、windowsのネットワーク共有をしている
ドライブは空きが0となって表示されません。
共有先PCはPC-B(WinXPHome)です。
disk_free_spaceでのパス設定をドライブ共有ソフトで設定しているドライブ名や、
windowsで使われる共有先パス "\\PC-B\C" としてもダメでした。
(windows標準の共有設定でも同様でした)
たぶんショートカットのような扱いにしか見ていないために起こるのだと思うのですが、
なにか解決策はありませんでしょうか。
お知恵をおかし頂ければ幸いです、よろしくお願いします。
0838nobodyさん04/09/14 00:11:32ID:???
パンがないならOSに聞けばいいじゃない
0839nobodyさん04/09/14 00:33:17ID:???
ext/standard/filestat.cの中でGetDiskFreeSpaceExAを呼び出してるから
UNCの形式で渡せば返ってきそう。試してないけど。
さて寝るべ寝るべ。
0840nobodyさん04/09/14 00:42:58ID:???
>>836
MySQL側がSJISに出来るならそれでも良い。
ところでaaacafeってSJISで書いたPHPスクリプト動かせるのか?
0841nobodyさん04/09/14 00:44:17ID:???
>>837
ローカルドライブにマウントしてみたら?
上手く値が返るかわからんが。
084283204/09/14 00:53:33ID:JkM64ylT
>>840
>>832でリンクしてるのは全てSJISで書いてあります。
一応動いてるので、大丈夫だと思うんですが…
だめだったら全く動かないというか、見れたもんじゃないですよね…?

逆に言うと、動いてるだけにどこがおかしいのかさっぱり判らないんですが…
晒している情報が足りないでしょうか?
0843カポコン04/09/14 02:23:17ID:???
>>837
一見まともそうに見えるスレだが。。釣りか?
なぜ2台のWindowsをネットワーク化し、それをPHPにするのかが分からない。
1台がWindows、もう一台がUnix系なら話は分かるが。。。
何の為のlocalhostなのかが分からん。同じOSだろ、容量増やしたいなら増設しろ。
ftp_connect()とかでもダメか?

後、ピングをPC-Aから飛ばしたりPC-Bからそれを受託したり、
確実に接続されているかも見ろ、2台のみの通信なら、
普通のストレートケーブルじゃなくて、クロスケーブルで接続する必要があるぞ。
勿論、ハブを介して、サーバCをハブとクロスケーブルで接続してあるというなら
話は別。パソコンAとパソコンBを接続したいというだけなら、
PHP板の連中には知恵熱しか与えないので、板違いw
さて。。レイヤー3のC++プログラムをコーディングして、私も寝ますか・・・。
0844nobodyさん04/09/14 02:24:16ID:???
>>843
なるほど、よくわかった。確かにお前はバカだ。かなり頭が悪い。
お前の母も、父も、やはりバカだったんだろう。
バカがバカなりに一生懸命バカやった結果がお前というバカなわけだ。
今のお前があるのも、これまで周囲が見限って放置してくれた結果であるわけだし、
今お前の周りにバカが多いのも、お前のバカを助長することに役立っているわけだ。
お前はバカになるしかなかった。親が、地域が、環境が、バカだった。
お前がバカになったことは仕方が無い。お前には責任は無い。
だが、お前はお前がバカであることを自覚し、皆のより良い未来を築く責任がある。
一生黙ってろ。
0845nobodyさん04/09/14 02:24:45ID:???
>>842
aaacafeがどういう設定で運用してるのか判らんが、
むしろ"動いちゃってるようにみえる"のが判りにくい一端だと思うよ。
概ね指摘の通り。

同じサーバでPHP+MySQLを使ってる(自分でコード書いてる)
ユーザの情報をあたってみなよ。
0846nobodyさん04/09/14 02:36:28ID:???
>>842
"ソ"は確かSJISだと後半1バイトが"\"と同じだから
エスケープシーケンスと誤認識とかで問題あったような
大人しくEUC使った方がいいと思われ
084783204/09/14 02:44:13ID:JkM64ylT
>>845
ですね。。
いじりながら色々試していると、「a」とかでも引っかかるので(実際のデータは全角カタカナのみ)、
やはりエンコード関係なのかなーという気もしてきてはいるんですが…
とりあえずaaaの所でも聞いてみます。Shift_jis使ってる人がいるかどうかが問題ですが。。
こちらでもわかる方いらっしゃいましたら、お願いします。
解決したらフィードバックします。
0848nobodyさん04/09/14 02:45:35ID:+yRv8JBt
大文字小文字を区別しないで、マッチしてるかどうかを
調べようと思って
ereg("/ngword/i", $_POST['message']))
と書いてみたのですが、なぜか思ったとおりに動作しません。
何でなんでしょうか…
084984804/09/14 02:46:43ID:???
>>848
ごめんなさい。最後の)は無いです。
ereg("/ngword/i", $_POST['message'])
で動作しません。
085083204/09/14 02:47:05ID:JkM64ylT
>>846
書いてる間に書き込みが…
うーむ、やはりEUCでも試したほうがいいですかねぇ。。
dbをEUCに切り替えて、データ全て入れなおさなくてはw
0851nobodyさん04/09/14 03:02:42ID:???
>>848
マニュアルとにらめっこすれば分かると思うんだけど
eregなのにPerl互換の正規表現になってる
この場合使うのはpreg_matchかeregiじゃない?
あと>>848に限ったことじゃないけど「動作しません」じゃ分からんから
ちゃんと目的の出力と実際の出力を比較してくれないと

>>850
データの入れなおしは簡単じゃない?
phpMyAdminのエクスポートでSQL吐けるから
085284804/09/14 03:05:38ID:???
>>851
ありがとうございます。
間違えてPerlのページを参考にしてしまったようです。
085382804/09/14 07:28:12ID:???
>>833
すみません

<?php
session_start();
echo session_id();
session_unset();
?>

とだけ書いて、何度実行しても
同じセッションIDになってしまいます。
順番とかが間違ってますか?
0854nobodyさん04/09/14 07:31:38ID:DJLMJCnC
質問させてください。
fedora core2 に PHP5.0.1をインストールしたいのですが make でエラーが出ます。
configure はとりあえずオプションなしで通しました。
エラーメッセージ
/home/hoge/download/php-4.3.8/ext/standard/info.c: 関数 `php_print_info' 内:
/home/hoge/download/php-4.3.8/ext/standard/info.c:653: internal compiler error: セグメンテーション違反です
完全なバグ報告を送って下さい。
適切ならばプリプロセス後のソースをつけてください。
<URL:http://bugzilla.redhat.com/bugzilla>; を見れば方法が書いてあります。
The bug is not reproducible, so it is likely a hardware or OS problem.
make: *** [ext/standard/info.lo] エラー 1

PHP4系でも 同様に make で同じエラーが出ます。
085585404/09/14 07:33:41ID:DJLMJCnC
ごめんなさい ↑のエラーメッセージが php-4.3.8になってますが
5系でも同じエラーメッセージが出る状態です。
0856nobodyさん04/09/14 07:59:25ID:???
>>853
昔どこかで見たような気がする。
以下のように明示的にセッションID を変更してみては?

session_start();
echo session_id();
$tmp = $_SESSION;
session_destroy();
session_id(md5(uniqid(rand(),1)));
session_start();
$_SESSION = $tmp;
0857nobodyさん04/09/14 08:56:19ID:???
>>853
>session_unset -- 全てのセッション変数を開放する
セッション変数だけでセッションIDをあぼーんするとは載ってないぞ
session_regenerate_idでちゃんと変わるからもっかい確かめて見れ
085882804/09/14 09:23:17ID:???
>>856
できましたー
ありがとうございます!
echoがあると2回目のsession_startで警告がでるので
そこだけ修正しましたー

>>857
変わらないっす。どこかおかしいでしょうか?

<?php
session_cache_limiter("nocache");
session_start();
echo session_id();
session_regenerate_id();
?>

0859nobodyさん04/09/14 11:42:04ID:zAdAGGge
php5.0.1を入れようとして、configure に「--with-apxs=/usr/local/apache/bin/apxs」
をつけると、
checking for Apache 1.x module support via DSO through APXS...

Sorry, I was not able to successfully run APXS. Possible reasons:

1. Perl is not installed;
2. Apache was not compiled with DSO support (--enable-module=so);
3. 'apxs' is not in your path. Try to use --with-apxs=/path/to/apxs
The output of /usr/local/apache/bin/apxs follows
./configure: /usr/local/apache/bin/apxs: not found
configure: error: Aborting
とエラーになってしまいます。

1. Perlは、「which perl」でperlのパスがでるし、そもそもウェブ上でperlのcgiが動いてます。
2は、php4を、httpd.confの中で、「LoadModule php4_module libexec/libphp4.so」してるので、問題ないかと
思います。
3は、確かに、そこにapxsがあるのを確認しました。

で、不思議なのは、現在、php4で、「--with-apxs=/path/to/apxs」で動いていて、
前に一度、「--with-apxs=/path/to/apxs」付きでphp5.0.1が問題なくインストールできたということです。
(事情があって、一度PHP4に戻しましたが)

つい機能、perlをソースからインストールしたのが関係してるのでしょうか?

どなたか、解決方法をご存じのかた、教えていただければ幸いです。
086085904/09/14 11:43:31ID:???
「つい機能、」⇒「つい昨日、」の間違いです。すみません。
0861nobodyさん04/09/14 12:28:00ID:???
>>859
perl をソースからインストールして、/usr/local/bin/perl になっているのに、
/usr/local/apache/bin/apxs の一行目が

#!/usr/bin/perl

になっているとか。
0862nobodyさん04/09/14 12:33:21ID:???
DOM XML関数の質問です。

$dom = domxml_new_doc ("1.0");
$hoge = $dom->create_element ("hoge");
$hoge_text = $dom->create_text_node("aaa<br />bbb");
$hoge->append_child($hoge_text);
$dom->append_child($hoge);

を$dom->dump_fileで保存すると
<hoge>aaa<br />bbb</hoge>
と<br />が「<br />」と置き換わってしまいます。
これを回避する方法ってあるのでしょうか?
086385904/09/14 13:03:25ID:???
>>861
ビンゴ!
#!/usr/bin/perl5
になってた。(これ消してたのね)
さんくす!
0864nobodyさん04/09/14 13:24:47ID:???
>>862
DOMをもう少し勉強する。
brはエレメント。
0865nobodyさん04/09/14 13:59:56ID:???
質問します。
PHPでPostgresの定義済み関数(ストアド)を動かすという
サンプルソースがあるようなサイト、書籍がありましたら
教えてください。よろしくお願いします。
086685404/09/14 14:25:18ID:???
os再起動したら うまくいきましたorz
0867nobodyさん04/09/14 14:32:52ID:???
>>858
それだとWarning吐くハズなんですが…
うちでは下ので普通に変わりますよ

<?php
session_start();
$old = session_id();
session_regenerate_id();
echo "old: $old <BR> new: ";
echo session_id();
?>
0868nobodyさん04/09/14 15:01:56ID:???
>>867
それってそのスクリプト内だけじゃない?
そのページをリロードすると
oldのほうは前といっしょじゃない?
0869nobodyさん04/09/14 15:13:38ID:???
<br />が「<br />」
<br />が「アンドlt;br /アンドgt;」
です。


>>864
もう少しヒントを、、、
aaa<br />bbbを直接テキストノードに入れるのは無理って事でしょうか?

$dom = $dom->first_child();
echo $dom->get_content();
でソースを確認すると問題なく<br />になっているので
$dom->dump_fileで書込む時に<br />が「アンドlt;br /アンドgt;」に強制的に変換されてますよね。
$dom->dump_fileの部分が原因と考えて良いのでしょうか?
0870nobodyさん04/09/14 15:38:54ID:???
>>868
クッキーに残ってるだけな希ガス
087186404/09/14 15:46:51ID:???
>>869
<hoge>aaa<br />bbb</hoge> は
hogeというエレメントが
aaaというテキストノードと
brという中身が空のエレメントと
bbbというテキストノードを持ってるということ。

つまり、aaaというテキストノードを作ってhogeにappend_child
brというエレメントを作ってhogeにappend_child
bbbというテキストノードを作ってhogeにappend_child
という手順になるはず。
0872nobodyさん04/09/14 16:28:13ID:Gl/Y6vfs
質問です。

GD使って001.jpgをリサイズして別名002.jpgとして保存します。
このとき002.jpgの画像が著しく汚く圧縮されてしまうのですが、
もっと綺麗に書き出す方法はあるのですか?お願いします。
087386204/09/14 16:28:46ID:???
>>871

そういう事だったんですね。
これでやりたい事が実現できそうです。
ありがとうございました。
0874nobodyさん04/09/14 17:18:46ID:???
>>872
標準の"リサンプル"でも不満なら、GD以外を使う
087587204/09/14 18:02:36ID:???
imagecreatetをimagecreatetruecolorにしたら解決しました。
すいませんでした。
0876nobodyさん04/09/14 19:11:50ID:Mbuhgwtm
メ−ルで物語を送信しているのですが、希望者が増え、送信するだけでも
大変な作業になってきました。これを自動化しようと考えています。
希望者がメルアドを記入しクリックするだけで、物語(全6話なので一日おきに
一話づつ)を配信できるシステムにしたいのですが、どういったプログラムをくめばいいのか
わかりません。どうか教えてください。よろしくお願いします。
0877nobodyさん04/09/14 19:15:35ID:???
>>876
メルマガじゃあかんのかと
0878nobodyさん04/09/14 19:24:14ID:???
>>876
http://pc5.2ch.net/test/read.cgi/hp/1095088431/69-70+72

手作業でやってなさい。
0879nobodyさん04/09/14 19:36:49ID:???
>>876
定期的に締め切りを定めて、その間に登録した人に送るって
スタイルでも良いと思うけどな。それを周期的に繰り返す。
1日1話というのもそうだけど「待つ楽しみ」もあるかと。

登録に合わせるなら、登録メールアドレス毎に現在何のシリーズを購読中で
配信するのは何話なのかを管理し、1日1回その配信リストに従って配信&リスト更新。
配信先が多大な場合は、シリーズ○話を配信する仕組みだけ独立させておいて、
配信はそのリストに登録することによって行う。順序やタイミングは抜けや重複配信
にならないようにね。簡単なシーケンス図(形式はどうでも)を書いて視覚化すると良い。

0880nobodyさん04/09/14 20:48:00ID:???
>>876
日付ごと話ごとのあて先リストファイルを作ってみたら?
たとえば yyyymmdd_n.dat (y:年 m:月 d:日 n:話)みたいなファイル名にして、本日 14日に申し込んだ人は、

20040914_1.dat
20040916_2.dat
20040918_3.dat
20040920_4.dat
20040922_5.dat
20040924_6.dat

にその人のアドレスを追記しておいて、cron で毎日その日のあて先ファイルの内容を BCC にした
メールを送信するようにするの。
そして処理したファイルは削除する。

そうすれば、登録スクリプトもメール送信スクリプトもかなりシンプルになると思う。
アドレスの削除処理は面倒だけどね。
088183704/09/14 22:32:15ID:???
レスが遅くなって申し訳ありません。

>>841 様
ローカルドライブにネットワークのドライブはマウントできないみたいでした。
調べ方が足りないのかもしれませんが、調べたことは試した状態です。

>>843 様
言葉足らずで誤解を招いたようで申し訳ありません。
物理的な増設は無理なので共有させています。
PHPで表示するのは、FTPサーバのドライブとしてネットワーク外から参照するためです。
接続自体はハブで接続されていて、FTPでのネットワークドライブへのアクセスはできています。

PHPで共有(マウント)されたドライブの空き容量は取得できないでしょうか。

0882nobodyさん04/09/14 23:00:48ID:+yRv8JBt
数千行あるテキストの中から、特定のワードを含んだ行だけを
削除するスクリプトを組んでいたのですが、どうも途中で
「サーバーが見つかりません」と表示されてしまいます。
$lines = file("sample.txt");
$fp = fopen("sample.txt", "w");
で読み込んで、0から最後の行まで一行ずつ調べて
書き込んでいます。
途中までは正しく書き込めているので、動作自体は
正しいと思うのですが、途中で止まってしまうので、
後半の部分が吹っ飛んでしまって困っています。
どのように対処したら良いのでしょうか…
0883nobodyさん04/09/14 23:07:02ID:???
ソースを見せな解らんちゅうに。。
0884nobodyさん04/09/14 23:23:05ID:???
>>882
共有鯖じゃねーの?
途中で殺されてる気がするが。
0885nobodyさん04/09/14 23:30:42ID:+yRv8JBt
>>883さん
すみません。こんな感じです。

$logfile = "test.txt";

if($_POST['xurl']){
$xurl = $_POST['xurl'];
$lines = file($logfile);
$LINENUM = count($logfile);
$fp = fopen($logfile, "w");
flock($fp, LOCK_EX);
for($i = 0; i <= $LINENUM; $i++){
if(!preg_match("/$xurl/i", $lines[$i])){
fputs($fp, $lines[$i]);
}
}
fclose ($fp);
}

>>884さん
共有鯖です。30秒以上かかると強制終了なのですが、
この場合は15秒くらいで止まってしまいます。
何とか効率の良い方法は無いでしょうか…
0886nobodyさん04/09/14 23:41:04ID:???
file()やめてwhileでまわしながら逐次行コピーしてみたら?

ちなみにphpのmax_exec_t以外にもリソース制限はある。
共有鯖で数千行のファイルを置換するような非常識な厨房に対応するため。
0887nobodyさん04/09/14 23:48:32ID:???
>>885
鯖の公開仕様をよく読めよ。cpu使用率や使用時間などで止められることがある。
厨房だらけの共有サーバならいいが、普通の人達が使ってる共有サーバなら、
そういうイカレた処理はやめてやれ。
あとpreg_もやめて、stristrとか他のを使ったほうがいいだろう。
それでも駄目なら一回ごとの量を決めて分割処理するしかないな。
0888 ◆.jC7ANgFY. 04/09/14 23:56:52ID:???
根本的な解決にはなってないけど同じことは
こう書いたほうが速いと思う。

$logfile = "test.txt";

if($_POST['xurl']){
 $data = implode("\n", preg_grep("/$xurl/Si",
  explode("\n", file_get_contents($logfile))));
 fwrite($fn = fopen($logfile, 'w'), $data);
 fclose($fn);
}
0889nobodyさん04/09/14 23:57:27ID:???
すえひろがりget, zuzaa
0890nobodyさん04/09/14 23:59:28ID:???
>>888
お前も共有サーバーは使わないで呉。

>>889
ついでにお前もだ。
089188904/09/15 00:01:02ID:???
自分のホメパゲ作るほど暇ないよ orz . . .
0892 ◆.jC7ANgFY. 04/09/15 00:23:08ID:???
>>890
そもそも重い処理を共有鯖でやる気はない。
私は同じ処理でもこうしたほうがいいと提示しただけ。

# そんなに重いのなら私ならMySQLに投げ入れる
0893nobodyさん04/09/15 00:57:33ID:CedxfwLg
質問です。
mail関数を使い送信したメールがPC用メールアドレスには届くのに携帯用メールアドレスには数時間後に届いたり、全く届かなかったりします。
これはなぜでしょうか。また、対策はあるのでしょうか。
どなたかご教授頂けると幸いです。
OS:redhat9
コード:mail($宛先, $タイトル, $本文, "From:[email protected]");
バージョン:PHP-4.2.2
0894軟式PHP04/09/15 01:08:56ID:???
ただの遅延だと思われ。
全く届かないってのは怪しいなぁ。一気に沢山送信してない?
携帯に一気にメール送信するとキャリアのメールサーバーにブロックされるよ。
0895nobodyさん04/09/15 01:14:37ID:CedxfwLg
ご返答ありがとうございます。
メール送信してるのは携帯向けに1通のみなんです。
遅延ならしょうがないですね。
0896nobodyさん04/09/15 02:38:45ID:???
>>888
特定のワードを含んだ行を削除するのだからその処理だと特定のワードを
含む行を取り出すことになるような気がするが・・・。

>>886 や >>887 が言いたかったのは、多分、file_get_contents や file を
使って巨大なファイルを開いた場合、メモリが大量に必要になり、共有サーバ
では他に迷惑がかかるということ。

例えば、以下のように一時ファイルに書き込んで処理を行うとメモリの使用量は
少なくて済む。

$fp1 = fopen($logfile, "r");
$fp2 = fopen($tmpfile, "w");
while (! feof($fp)) {
  $line = fgets($fp1);
  if (! stristr($line, $xurl)) {
    fwrite($fp2, $line);
  }
}
fclose($fp2);
fclose($fp1);
rename($tmpfile, $logfile);
0897nobodyさん04/09/15 02:55:11ID:???
PHPというか、正規表現の話になってしまいますがここでいいでしょうか?

if (!ereg("^[0-9]{1,4}",$hoge)) echo ”err!”;
で$hogeが0〜9999の範囲の数字かどうかチェックしたつもりになっていたのですが、
たとえば、「50a」でもチェックをパスしてしまいます。
ニューメリックチェックを正しく正規表現でするにはどうすればよいのでしょうか?
0898nobodyさん04/09/15 03:14:24ID:???
> # そんなに重いのなら私ならMySQLに投げ入れる

恥の上塗りw
0899nobodyさん04/09/15 03:19:56ID:???
>>897
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0900nobodyさん04/09/15 03:28:07ID:???
>>897
もとデータによるんじゃない。
^[0-1]{1,4} だと先頭に4桁の数字があればあとに何が続こうとTrueになるので、^[0-1]{1,4}$と
書くのが普通だとは思うけど。
is_numeric(); と $len = strlen(); if ($len < 5); で十分なこともあるかな。
0901nobodyさん04/09/15 03:33:38ID:???
>>900
先頭の数だけ()で取り出して、さらに評価というのもばかげてるしな。
あと、\d{1,4}のチェックなら、ユーザが全角で入力する場合を想定して
コンバートかけたほうがいいこともある。趣味グラマなら別にいいんだが。
0902nobodyさん04/09/15 03:43:05ID:???
>>898
もしや帰ってきた本7か?!
おれは待っていたぞ!
090389704/09/15 03:44:05ID:???
>>899
PHPも正規表現も昨日からはじめたばっかりで、
いろいろ読んでると正規表現は言語による方言?が多そうだったのでここに書きました。
似たような件なら次からはそこの方がいいのでしょうか?

>>900
なるほど。
$でこれで終わりだよと宣言すればいいのですね。
やってみたらうまくいきました。
ありがとうございました。
それと調べたつもりでしたが、is_numericあったのですね。。。
見落としてましたorz
090489704/09/15 03:47:37ID:???
>>901
全角対策についてはフォームでFEPがオンにならないように対処しました。
といっても、コピペには対応できないわけですが。
やぱチェック前に半角変換したほうが確実ですね。
処理追加します。
ありがとうございました。
090583204/09/15 04:54:05ID:YiP4QPmp
遅まきながら…
db、PHP共にeuc-jpにしたら何の問題もなく動きました。
ありがとうございました。
0906nobodyさん04/09/15 05:51:58ID:???
クライアント側では確証ないからなあ。
面倒でもサーバ側でチェックするしかないんだよね。
0907nobodyさん04/09/15 08:08:52ID:???
空のファイルを開こうとすると
Warning: fopen(): SAFE MODE Restriction in effect.
というエラーがでて開けません。。
パーミッションは777でやってますが、どうしたらいいでしょうか?
よろしくおねがいします
0908nobodyさん04/09/15 08:29:18ID:???
この状態でファイルを開くと危険なので
Warning: fopen(): SAFE MODE Restriction in effect.
というエラーを出したのですが開発者に気付いてもらえません。。
必要十分なメッセージを送ってるつもりですが、どうしたらいいでしょうか?
よろしくおねがいします
レス数が900を超えています。1000を超えると表示できなくなるよ。