【PHP】質問スレッドpart21【php】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
04/08/27 18:00ID:???・新規質問の方は上げてください。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
0878nobodyさん
04/09/14 19:24:14ID:???http://pc5.2ch.net/test/read.cgi/hp/1095088431/69-70+72
手作業でやってなさい。
0879nobodyさん
04/09/14 19:36:49ID:???定期的に締め切りを定めて、その間に登録した人に送るって
スタイルでも良いと思うけどな。それを周期的に繰り返す。
1日1話というのもそうだけど「待つ楽しみ」もあるかと。
登録に合わせるなら、登録メールアドレス毎に現在何のシリーズを購読中で
配信するのは何話なのかを管理し、1日1回その配信リストに従って配信&リスト更新。
配信先が多大な場合は、シリーズ○話を配信する仕組みだけ独立させておいて、
配信はそのリストに登録することによって行う。順序やタイミングは抜けや重複配信
にならないようにね。簡単なシーケンス図(形式はどうでも)を書いて視覚化すると良い。
0880nobodyさん
04/09/14 20:48:00ID:???日付ごと話ごとのあて先リストファイルを作ってみたら?
たとえば 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 にした
メールを送信するようにするの。
そして処理したファイルは削除する。
そうすれば、登録スクリプトもメール送信スクリプトもかなりシンプルになると思う。
アドレスの削除処理は面倒だけどね。
0881837
04/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:???0885nobodyさん
04/09/14 23:30:42ID:+yRv8JBtすみません。こんな感じです。
$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:???ちなみにphpのmax_exec_t以外にもリソース制限はある。
共有鯖で数千行のファイルを置換するような非常識な厨房に対応するため。
0887nobodyさん
04/09/14 23:48:32ID:???鯖の公開仕様をよく読めよ。cpu使用率や使用時間などで止められることがある。
厨房だらけの共有サーバならいいが、普通の人達が使ってる共有サーバなら、
そういうイカレた処理はやめてやれ。
あとpreg_もやめて、stristrとか他のを使ったほうがいいだろう。
それでも駄目なら一回ごとの量を決めて分割処理するしかないな。
こう書いたほうが速いと思う。
$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:???0891889
04/09/15 00:01:02ID:???そもそも重い処理を共有鯖でやる気はない。
私は同じ処理でもこうしたほうがいいと提示しただけ。
# そんなに重いのなら私ならMySQLに投げ入れる
0893nobodyさん
04/09/15 00:57:33ID:CedxfwLgmail関数を使い送信したメールがPC用メールアドレスには届くのに携帯用メールアドレスには数時間後に届いたり、全く届かなかったりします。
これはなぜでしょうか。また、対策はあるのでしょうか。
どなたかご教授頂けると幸いです。
OS:redhat9
コード:mail($宛先, $タイトル, $本文, "From:[email protected]");
バージョン:PHP-4.2.2
0894軟式PHP
04/09/15 01:08:56ID:???全く届かないってのは怪しいなぁ。一気に沢山送信してない?
携帯に一気にメール送信するとキャリアのメールサーバーにブロックされるよ。
0895nobodyさん
04/09/15 01:14:37ID:CedxfwLgメール送信してるのは携帯向けに1通のみなんです。
遅延ならしょうがないですね。
0896nobodyさん
04/09/15 02:38:45ID:???特定のワードを含んだ行を削除するのだからその処理だと特定のワードを
含む行を取り出すことになるような気がするが・・・。
>>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:???if (!ereg("^[0-9]{1,4}",$hoge)) echo ”err!”;
で$hogeが0〜9999の範囲の数字かどうかチェックしたつもりになっていたのですが、
たとえば、「50a」でもチェックをパスしてしまいます。
ニューメリックチェックを正しく正規表現でするにはどうすればよいのでしょうか?
0898nobodyさん
04/09/15 03:14:24ID:???恥の上塗りw
0899nobodyさん
04/09/15 03:19:56ID:???正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0900nobodyさん
04/09/15 03:28:07ID:???もとデータによるんじゃない。
^[0-1]{1,4} だと先頭に4桁の数字があればあとに何が続こうとTrueになるので、^[0-1]{1,4}$と
書くのが普通だとは思うけど。
is_numeric(); と $len = strlen(); if ($len < 5); で十分なこともあるかな。
0901nobodyさん
04/09/15 03:33:38ID:???先頭の数だけ()で取り出して、さらに評価というのもばかげてるしな。
あと、\d{1,4}のチェックなら、ユーザが全角で入力する場合を想定して
コンバートかけたほうがいいこともある。趣味グラマなら別にいいんだが。
0903897
04/09/15 03:44:05ID:???PHPも正規表現も昨日からはじめたばっかりで、
いろいろ読んでると正規表現は言語による方言?が多そうだったのでここに書きました。
似たような件なら次からはそこの方がいいのでしょうか?
>>900
なるほど。
$でこれで終わりだよと宣言すればいいのですね。
やってみたらうまくいきました。
ありがとうございました。
それと調べたつもりでしたが、is_numericあったのですね。。。
見落としてましたorz
0904897
04/09/15 03:47:37ID:???全角対策についてはフォームでFEPがオンにならないように対処しました。
といっても、コピペには対応できないわけですが。
やぱチェック前に半角変換したほうが確実ですね。
処理追加します。
ありがとうございました。
0905832
04/09/15 04:54:05ID:YiP4QPmpdb、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.
というエラーを出したのですが開発者に気付いてもらえません。。
必要十分なメッセージを送ってるつもりですが、どうしたらいいでしょうか?
よろしくおねがいします
0910907
04/09/15 09:08:50ID:???mkdirで新規ディレクトリを作り、そこに新しいファイルを生成したいのですが
できないのです
よろしくお願いします。
0911907
04/09/15 09:27:42ID:???新規ディレクトリを作ってパーミッション777に設定しても
ディレクトリを開く事すらできません^^;
0913907
04/09/15 09:49:50ID:???mkdirしてパーミッションを707にしたいのですけど
どうしたらいいのでしょうか?
よろしくお願いします
0914907
04/09/15 11:41:10ID:???0915軟式PHP
04/09/15 11:44:30ID:???0916nobodyさん
04/09/15 12:11:20ID:dKmLYC94誰か「絞込み検索」のフリースクリプトが
置いてあるサイト知らない?
0917nobodyさん
04/09/15 12:31:44ID:UvnPqyoT0918nobodyさん
04/09/15 12:42:56ID:???0919nobodyさん
04/09/15 12:57:04ID:MDFIDuDl0921nobodyさん
04/09/15 14:30:23ID:???php.iniってどこに置いたらいいんですか?
0922nobodyさん
04/09/15 14:41:06ID:???適切なとこ。マニュアル嫁
0923nobodyさん
04/09/15 15:35:11ID:???読めと言われても困るだろうからね。
ttp://php.s3.to/man/faq.installation.html#faq.installation.phpini
0924nobodyさん
04/09/15 15:48:32ID:???0927nobodyさん
04/09/15 17:12:03ID:???書き直しが必至」というレスがありましたが、俺がハマってるところはバージョンの違いに関係ありますか。
==========
【 状況 】 PHP5 で、以下のようなものを作った。
[class file]
class A {
var $hoge;
var $fuga = array();
// 以下、メンバ変数とか配列の初期化のみ。子クラスで使われる変数と配列はすべてここで宣言されている。
}
class B extends A {
function B {
あんなこととかこんなこととか;
}
}
class C extends A {
function C {
そんなこととか;
}
}
[another file]
// クエリによって、B か C のいずれかのクラスからオブジェクト $obj を生成。
function channel2($obj) {
$obj->$hoge = "ひろゆき";
$obj->$fuga = "2ちゃんねる";
}
【 問題点 】 PHP4.1.2 の環境では想定していた動作が得られない。
ユーザ定義関数の外からメソッドを呼び出すことはできるが、ユーザ定義関数内でメンバ変数への値の代入が行われていないようだ。
以上、よろしくお願いしましま。
0928nobodyさん
04/09/15 17:28:01ID:???4だと function channel2($obj){} とやると、ローカル変数 $obj は参照ではなく、
複製される。ので、関数内で $obj を弄っても、呼び出し側の object は変更されない。
function channel2(&$obj){} と書いて参照渡しにする必要がある。
0930nobodyさん
04/09/15 17:46:16ID:???そりゃPHP5準拠で書かれたスクリプトがPHP4で動かない可能性は高いでしょ。
なんの問題もなく動いたらむしろ何じゃそらって思うよ。
しかし、上の例だと & で参照を明示する4向けのスクリプトは変更なしで5でも動く。
そういうわけで、バージョンによる互換性のなさに嵌ったというよりは、
単に、PHP4じゃ動かないスクリプトを書いちゃいましたってことじゃないかな。
少なくとも、
> PHP4 でオブジェクト指向のプログラムを書くと、PHP5に移行したとき書き直しが必至
PHP4で書いたからPHP5じゃ動きませんでしたっていう事例ではないと思う。
0931nobodyさん
04/09/15 17:53:14ID:???アクセス関係の修飾子つずに、予約語にも気を使ったつもりが、
$hoge->foo()->bar(); みたいのでこけたことはある。
けどphp4から5へは思ったよりきっちり下位互換されてて変更なしで動くな。
# pearなんかもそうだけど、php4でOOPの限界に挑戦してるとエラー出る印象。
0932nobodyさん
04/09/15 18:00:56ID:???4だと、関数の戻り値がObject型のとき、
&function ret_foo() {
$foo = new Class;
return $foo;
}
$bar =& ret_foo();
とやらないと、最終行でObjectがドカーンとコピーされちゃって処理負荷になるので
これにも気をつけてね。
0933nobodyさん
04/09/15 18:02:15ID:???function &ret_foo() {} ね。
0934nobodyさん
04/09/15 18:08:38ID:???関係ない話ですまないが でインデントしたコードは
IEなんかでコピペした場合はそのまま動いて便利なんだが
うちのJaneでは、「 」としてコピーされてしまうので
全角空白でインデントされているのと利便性は変わらないな
ということに気づいた今日だった
0935nobodyさん
04/09/15 18:12:18ID:???0936nobodyさん
04/09/15 18:14:43ID:???まともな質問者にはこのスレでもちゃんと回答が出るということか。
0937nobodyさん
04/09/15 18:16:42ID:???0938927
04/09/15 18:36:04ID:???ポインタがわからなくて C で 3回挫折した俺だが、その説明はうまくイメージできた気がする。
OOP は初めてだけど、これからちょこちょこ組んで自分のものにしますわ。
>>930
勢いでローカル環境をバージョンアップしてしまったのです。
借りてる鯖はバージョンが古くて PEAR もなければたいしたモジュールも入ってないので、
せめて自宅の環境だけは最新にしてみたくなったのさ。
友人のサイトのスクリプト改造とか手伝ってる中で OOP をちゃんと理解せんといかんなあと
思い立ったのが PHP5 を入れた理由の一つだけど、今回つまずいたのも一つ勉強になったから
まあこれでいいやと思ってる。
>>936-937
次回がんばります。
0939nobodyさん
04/09/15 19:00:09ID:???ただの間接アドレッシングだろ
何が難しいことがあるんだろうか
0940nobodyさん
04/09/15 19:20:37ID:???お前はhttp://pc5.2ch.net/tech/kako/1040/10408/1040820373.htmlの54だな!
まあポインタはCの入門書で文法覚えた段階では「どうやって何に使うのか」ってのは
そのときは分からないままだからな。初心者がポインタが理解できないというのは正しいんだ。
そこで止まるかほっといて進むかだと俺は思う。
まあPHPのリファレンスはポインタではないのでスレ違いはこのへんで止めるが。
0941nobodyさん
04/09/15 19:28:04ID:???つーかオイラは、CのポインタよりPHPのリファレンスの方が分かり辛い。
今やってるのはディープコピーなのかシャローコピーなのか
いつも不安になりながら書いてる。
PHPはCとは違うんだし慣れるしかないやね。
で、何事も無かったかのように次の質問どうぞ。
0942nobodyさん
04/09/15 19:48:04ID:???MYSQLに直接つっこんでる画像データを出力する際に
縦横サイズの変更を行いたいんですけど、どうすればよいでしょうか?
getimageで縦横取得してからと思ったのですが
Warning: failed to open stream: No such file or directory
みたいな感じで怒られました。
DBに突っ込む際に縦横サイズも格納しておかなければならないのでしょうか?
0943nobodyさん
04/09/15 19:51:19ID:dKmLYC94よく分かってないけど多分そんな感じです。
出会い系とかで例えてみると、
年齢と性別を同時検索してやるやり方が分かりません。
あと年齢だと
「○歳〜○歳までで検索」
とかいう方法もどうやったらいいものか。
かなり初歩的な質問で申し訳ない。
なんで、いいソース場所知りませんか?
0944nobodyさん
04/09/15 19:56:22ID:???違うよ、そんな昔から2chには居ないよ。
#つかそのスレ読んで思ったんだが
#「アセンブラと言っている時点で(ry」と言うような頑固な人っていつの時にも居るんだなぁって思ったよ
#そんな細かなこといちいちつっこまれてもねぇ。。「アセンブリ」じゃないと納得しないのかね
以後何も無かったように質問どうぞ
↓
0946nobodyさん
04/09/15 20:05:34ID:???0947nobodyさん
04/09/15 20:06:40ID:???0948nobodyさん
04/09/15 20:09:50ID:???0951nobodyさん
04/09/15 20:57:07ID:???データの作りや格納方法でやり方は全然違う。
まずそれをきちんと把握すること。
DBMSの場合なら、データの絞込み抽出はそのものが持っている機能。
多くのDBMSはSQLをサポートしており、それにより該当する機能を使うことができる。
なので標準的なSQLを勉強してください。
0952nobodyさん
04/09/16 07:19:05ID:???そういうことが出来ると聞いたのですが。。
0953nobodyさん
04/09/16 07:19:54ID:???どうも上手くいきません。
header("Content-type: video/x-ms-wmv");
readfile($hoge);
のようにしています。
調べてみると、ファイルサイズが小さいものは
ちゃんと表示されるのですが、ファイルサイズが大きいものは
「ページが表示されません」と表示されてしまうようなんです。
freadでちょっとずつ読み込んで出力してもだめみたいです。。。
どなたか、解決策をお願い致します。
0954953
04/09/16 07:21:51ID:???すいません。ちょっと修正です。
「ぺージが表示されません」ではなく、
「ページを表示できません」でした。
0955nobodyさん
04/09/16 08:07:14ID:???適切にコンパイルし、適切に設定する。
http://www.php.net/manual/ja/installation.php
0956nobodyさん
04/09/16 08:32:58ID:wopdBrj5「競走成績」→「2004年4回阪神2日(9月12日)」→「11R」
と押して表示されるページの内容を取得して
変数に格納したいのですがどうすれば?
0957nobodyさん
04/09/16 08:44:51ID:???すぐ出かけるので詳しく書けないが、
POST /JADB/accessS
CNAME=〜
xW01=〜
てのを送信すれば良い。
要するに実際のブラウザが送っている情報と同じ物を送れば当然同じ物が返ってくる。
ieHTTPHeaders
ttp://www.blunck.info/iehttpheaders.html や
proxomitron
ttp://www.proxomitron.org/
のようなリクエストヘッダや応答ヘッダを表示できる物を使うと楽。
0958942
04/09/16 09:25:45ID:???画像表示ソースを
<img src="gazou.php">
みたいに呼び出して
gazou.phpの中身は
$sql="画像取得クエリ";
$res = mysql_query($sql,$conn);
header("Content-Type: image/jpeg");
$image = mysql_result($res, 0, "格納カラム");
$image_size = getimagesize($image);
$img_old = imagecreatefromjpeg($image);
$img_new = imagecreate($image_size[0] * 2,$image_size[1] * 2);
//拡大
imagecopyresampled($img_new,$img_old,0,0,0,0,$image_size[0] * 2,$image_size[1] * 2,$image_size[0],$image_size[1]);
print $img_new
こんな感じで書いてみたんですけど、
ソース自体がおかしいですか?
0959956
04/09/16 10:27:58ID:wopdBrj5string file_get_contents ( string filename [, int use_include_path [, resource context]])
引数をどのように指定すればよいのでしょうか?
0960nobodyさん
04/09/16 11:10:46ID:ysqshSNVheader("Location : input.php");は使えないの?
飛ばないんだけど、なぜ?
0961nobodyさん
04/09/16 11:39:08ID:RlFTlQn8データベースから抽出です。
そのSQL文教えてください。
「a条件のみ」「b条件のみ」「a+b条件」みたいに
どうやって条件代えて出力させるんですか?
0962nobodyさん
04/09/16 12:08:26ID:???0963nobodyさん
04/09/16 12:18:16ID:PHMt0rSl0964nobodyさん
04/09/16 12:19:25ID:???あーたしか、携帯の場合、機種(キャリア?)によって、
フルパスじゃないと飛ばないやつがあったぞ。
まったく携帯サイトは面倒でやってられんよなぁ。
0965nobodyさん
04/09/16 12:31:02ID:9nyxCloV例えばPHPで作られた掲示板なんかで、ログファイルの所有者がapacheだったら、
その鯖の他のユーザーからPHPで改変されちゃう恐れがあるの?
0966966
04/09/16 12:40:18ID:RlFTlQn8書き込まれた絵文字の相互変換ってできますか?
3キャリアはキャリア毎の文字列、PCは画像みたいな出力方法で。
デフォルトだと、ドコモとauならある程度互換性あったと思うけど
ボーダフォンが見当違いな絵文字が出力される。
実際に試した人ご教授よろしく。
0967nobodyさん
04/09/16 13:20:22ID:epbnr+ELFALSE条件でなくTRUE条件で実行したいものとか書きたいんだけど
どうしたらいいですか?
これの or の文法はPHPマニュアルのどこあたりに書いてありますか?
0968nobodyさん
04/09/16 13:41:13ID:GBVH7aBq0969nobodyさん
04/09/16 14:03:40ID:???0970nobodyさん
04/09/16 14:03:58ID:???http://jp2.php.net/manual/ja/function.mb-convert-kana.php
0971970
04/09/16 14:04:48ID:???0973nobodyさん
04/09/16 14:12:56ID:???0975nobodyさん
04/09/16 15:06:10ID:???0976nobodyさん
04/09/16 15:07:18ID:???作れば?
レス数が950を超えています。1000を超えると書き込みができなくなります。