【PHP】質問スレッドpart32【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/03(火) 17:18:20ID:???【基本ルール】
・新規質問の方は上げてください。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辺り
0370nobodyさん
2006/01/20(金) 07:36:51ID:???で、$hoge が定義されていないときに if (!$hoge) すると Notice が出て、
if (empty($hoge)) ではエラーなし。
0371nobodyさん
2006/01/20(金) 07:50:35ID:qY5zGHnC>>369
>>370
どうやら自分がものすごい勘違いをしていたようです。
おそらく関数ではなく ! を使った式で正解だと思います。
説明についてもnullとfalseを間違えるなどお騒がせしました。
ありがとうございます、無事解決できました。
0372nobodyさん
2006/01/20(金) 09:40:24ID:WExUI5wLPHPって、ユーザーのアップロード処理が終わってからこちらで作成したPHPが起動しているようですが
アップロード中から動かすことって出来ないですかね?
アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。
環境は
・Linux
・Apache2.2
・PHP 5.1.2
ですが、これが可能になるなら環境の変更も考えるかもしれません。
0373nobodyさん
2006/01/20(金) 09:44:05ID:???> アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。
それで通知できてるんならいいんじゃないの?
0374372
2006/01/20(金) 09:48:21ID:WExUI5wLできてるって言うか、ないよりマシな代物です。
upload_tmp_dirに作られるファイルは、当然ファイル名はランダムで、
どれがどのユーザーのファイルかは分からないんで、全ファイルのサイズを通知して
ユーザーに適当に推測してもらうしかないですし・・・
0375nobodyさん
2006/01/20(金) 10:26:46ID:???PHP はリクエストを受けて、それに対してレスポンスを返すのが
仕事だから、リクエストの途中の話は知ったことじゃないと
思うんだけど。
0376545
2006/01/20(金) 13:26:39ID:yXtCuLJZ「Submit前」のFormの値をPHPで取り出す方法を思案中。
pseudoでもちろん動かないけど、やりたいことはこんな感じ
+++++++++++
...
<form name="aaa"><input type"text" name="bbb" value="" onChange="register_value()"></form>
...
<script>
function register_value() {
<? $ccc ?> = document.aaa.bbb.value;
}
</script>
+++++++++++
他にメインのFORMがあっていろいろやってるので、ここではどうしてもSubmit前に処理する必要がある(と考えてください..)。
結局的にやりたいことは、FORM上の値を、SUBMITする前に(つまり $_POST['bbb'] ではなく)その場で(この場合はonChangeの度に)PHPの値$cccに渡したい。
JavaScriptの「document.aaa.bbb.value」ではなく、PHP独自で現document上のFormの値を取り出すことは可能なのでしょうか?
0377nobodyさん
2006/01/20(金) 13:44:14ID:???どう考えても基本から分かってない。
PHPとJavaScriptの役割の違いを全く理解してないな。
そもそもどう考えたらPHPで送信済みの物を操作できると思えるのかと小一時間・・
PHPとは全く関係ない、JavaScriptスレに逝け
0378nobodyさん
2006/01/20(金) 13:53:47ID:???0379545
2006/01/20(金) 14:17:24ID:yXtCuLJZonChangeで再読込みしてURLから渡すぐらいしかどうにもならんすよね。
ガッツリ理解しますた。
いや、つまりサーバ介さなきゃどうにもならんってことを理解しますた。
0380nobodyさん
2006/01/20(金) 14:29:04ID:???0382545
2006/01/20(金) 14:57:33ID:yXtCuLJZ同時にdocument.forms[n].submit();の手動二段階Submitで何とかなる気もしてきた。
ありがとござんす。
0383nobodyさん
2006/01/20(金) 16:41:58ID:???http://prototype.conio.net/
0384nobodyさん
2006/01/20(金) 16:58:01ID:???http://mochikit.com/
0385nobodyさん
2006/01/20(金) 18:40:06ID:???接続元のIPが一定範囲内になるかどうか調べるのって一発でできますか?
たとえば以下のIPの範囲内に含まれているか否かが知りたい場合。
255.255.255.0 〜 255.255.255.15
接続元IPを最初文字列比較にして、最後だけ数値比較でやればできるわけですが...
0386nobodyさん
2006/01/20(金) 18:58:51ID:???0387nobodyさん
2006/01/20(金) 19:31:47ID:???むかーし関数書いてこのスレかくだ質に書いた。
過去ログ嫁
みつからなそうだからヒントip2longとビット演算そしてサブネットマスク
0391nobodyさん
2006/01/21(土) 02:11:11ID:xfElLr5Fphp では構文エラーがでないのに、phpunit でテストクラスを実行させると
構文エラーが出てしまいます。何が原因なのでしょうか?
書き出したばかりのスケルトンも構文エラーが出ます。
$ php -version PHP 5.1.2
$ phpunit --version PHPUnit 2.3.4 by Sebastian Bergmann.
$ php HogeTest.php
PHPUnit 2.3.4 by Sebastian Bergmann.
...
Time: 0.013412
OK (3 tests)
$ phpunit HogeTest
PHPUnit 2.3.4 by Sebastian Bergmann.
Syntax error in HogeTest.php
~~~~~~~~~~~~~~~~~~~~~~~~~~
0392nobodyさん
2006/01/21(土) 15:34:17ID:???参考になるソース ( アプリ、ライブラリなど ) を教えてくれませんか。
0393nobodyさん
2006/01/21(土) 15:38:24ID:???0394nobodyさん
2006/01/21(土) 16:39:25ID:jZKXWMZDaddUserでmysqlデータベースにユーザーを追加しました。
データベースに新規追加できたのですが、パスワードがMD5で格納されてしまいます。
'cryptType'=>'none' にしたので、パスワードが平文で追加されるはずだと思うのですが、
どこか間違っているでしょうか。お願いします。
<?PHP
require_once('Auth/Auth.php');
// Authオプション
$params = array('dsn'=>"mysql://party_user:party_pass@localhost/party",
'table'=>'auth',
'usernamecol'=>'username',
'passwordcol'=>'password',
'cryptType'=>'none',
'db_fields'=>'user_id');
$objAuth = new Auth("DB", $params);
// ユーザーの追加
if($objAuth->addUser('ABC', '123', array('user_id'=>'4'))) {
echo "ユーザーを追加しました。";
}
?>
0395nobodyさん
2006/01/21(土) 17:24:32ID:???おいらの手元のある pear/Auth/Container/DB.php (DB.php,v 1.40 2003/11/15, Authのverは1.2.3くらい?)だと、
function addUser($username, $password, $additional = "")
{
if (function_exists($this->options['cryptType'])) { // つまりnone()関数が無いとmd5()になる
$cryptFunction = $this->options['cryptType'];
} else {
$cryptFunction = 'md5';
}
...
$query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)",
...
$cryptFunction($password), // 上のnone()かmd5()を使う
...
);
となっている。
何もしない(同じ文字列を返す)none()関数を作ればいいのかも知れんね。(他への影響は知らん)
0397nobodyさん
2006/01/21(土) 18:23:47ID:???アップロード掲示板で
アップしたファイルの拡張子を取得する方法を教えて下さい。
よろしくお願いします。
0398^0^
2006/01/21(土) 18:27:39ID:NwQNGC9O0399nobodyさん
2006/01/21(土) 18:33:32ID:???0402394
2006/01/21(土) 18:55:35ID:???ああ、なるほど、'cryptType'というのは
$cryptFunction($password)
の$cryptFunctionに入るんですね。
だから'cryptType'=>"strval"とすると
strval($password)となって平文が格納されると。
そしてやってみたら平文で格納されました。どうもありがとう。
勉強になりました。
0404nobodyさん
2006/01/23(月) 12:01:54ID:1NSQ7CLk0405nobodyさん
2006/01/23(月) 12:15:31ID:???悪いことは言わないからやめた方がいい
もっと小さな関数を作るようにしろ
0406404
2006/01/23(月) 12:34:43ID:???0407nobodyさん
2006/01/23(月) 12:48:38ID:cMW2eJoCtrueをあらわす数字は1で
falseをあらわす数字は0で合ってますか
0408nobodyさん
2006/01/23(月) 12:59:14ID:???0409nobodyさん
2006/01/23(月) 14:31:16ID:iSBxRO6mDBと接続して、該当する画像を表示させたいのですが、
[:XXXX:]は1テキスト内に複数あり、
どのように置換したらいいのかわかりません。
DBと接続、該当する画像のURLを取ってくるところまでは
わかるのですが…。
PHPのバージョンは4.3.11です。
0410nobodyさん
2006/01/23(月) 15:12:10ID:???厳密には違う。どちらも本来は数字ではない。
「数値」に変換した場合はtrue=1、false=0になるが、
「数字(文字列)」に変換するとfalseは""になるという挙動の違いが生まれる。
逆に同等の動きになる数値という意味ではtrueは0以外なら何でも、falseは0、となる。
0412nobodyさん
2006/01/23(月) 15:23:15ID:???mb_ereg_replaceまたはpreg_replaceでは置換時にPHPコードを実行するオプション(e)があるのでそれを使うのが楽。
0413nobodyさん
2006/01/23(月) 15:55:50ID:???0414nobodyさん
2006/01/23(月) 16:00:28ID:???0416nobodyさん
2006/01/23(月) 20:44:52ID:???これなんかのモジュールたりないわけ?
Notice [PHP]: Only variable references should be returned by reference in file include/functions.php line 547
0417nobodyさん
2006/01/23(月) 20:54:02ID:???0418nobodyさん
2006/01/23(月) 21:42:04ID:???一番真っ先に考えたのが、一番上の行からfileで配列に入れて
総当りでチェックする方法なのですが、どうも効率が悪いような気がします。
0420nobodyさん
2006/01/23(月) 23:35:36ID:???どんな感じの手順を踏めばいいでしょうか?
0422nobodyさん
2006/01/24(火) 00:27:53ID:???ftpでgetした際に必ず一時ファイル等を作成する必要がありますか?
ダウンロードのためにサーバ側でも一時的に容量を消費してしまうことが
若干ナンセンスに感じますがしょうがないでしょうか?
0424nobodyさん
2006/01/24(火) 00:59:22ID:???どんな関数を使えば良いでしょうか?
ftp_fgetだとオープンしてるファイルに一旦書き込む必要がありますよね、
ftp_getでもサーバ側に一旦保存する必要がありますし。
0425nobodyさん
2006/01/24(火) 01:26:24ID:???HTML中に<h4>が出てきた場合、その場所から数えて最初の空行までの範囲を抽出したいのですが、
以下のところで止まっています。
if (preg_match("/^<h4>/",$line)){
print_r($line);
}
ここからどうすればよいのでしょうか?
while (preg_match("/^$/",$line)) {
break;
}
↑これでは上手く行きませんでした。
0426nobodyさん
2006/01/24(火) 01:58:35ID:???すまん。遠回しに書いた俺が悪かった。
> ftpでファイルを作らずにget「できるなら」
PHPの標準にはそんな関数は無い。
記憶違いで無ければPEARのNet_FTPにすら無い。
つまり一時ファイルを作るしかないってことだ。
ま、自力でFTP通信を一から書けば何とかできるかもしれんがな。
0431nobodyさん
2006/01/25(水) 04:02:05ID:B3uQ6LQKうまく動作する方法はないでしょうか。functionのなかにifだとが利かないので
forで代わりにしようと思ったら、これもエラーになってしまいました。
関数の中に関数を入れないと正常に動作します、以下は問題の箇所のコードです↓
function ginfo_block(){
global $ct,$ginfo,$glist;
for ($a = 1; $a !== 1; $a++;) {
print"ginfo_block()のなかのforは実行されました<br>";
}
print"ginfo_block()は実行されました<br>";
}
0432nobodyさん
2006/01/25(水) 04:13:28ID:???ただの構文ミス
for ($a = 1; $a !== 1; $a++;) {
↓
for ($a = 1; $a !== 1; $a++) {
0433nobodyさん
2006/01/25(水) 05:40:59ID:B3uQ6LQKありがとうございます、いかに変更したところ正常に作動しました
for ($a = 1; $a !== 2; $a++) {
またif構文が正常に作動しなかった理由もわかりました。
()の中が空っぽでもTrueになると勘違いしていたことが原因でした。(実際はFalseになってしまうのですね)
0435nobodyさん
2006/01/25(水) 10:08:24ID:???0436nobodyさん
2006/01/25(水) 10:13:49ID:???0437nobodyさん
2006/01/25(水) 12:29:49ID:B3uQ6LQKすいませんでした。
>>435
最近functionばかりいじっていたので錯覚してしまいました。
>>436
その一文はただの誤植です。
0438nobodyさん
2006/01/25(水) 12:50:22ID:???> その一文はただの誤植です。
二文あるようだが。
>>431
> function や for の関数の中
> 関数の中に関数を入れないと
0439nobodyさん
2006/01/25(水) 12:59:14ID:???ということはだ。まだ文字面しか飲み込めてないんだな。
if や for や function, while などが「意味」としてまだ理解できてない。
頑張れ。
0440nobodyさん
2006/01/25(水) 15:30:30ID:???自動的にページ内から掲示板へのリンクを消すといった処理ってできないでしょうか?
更新が長く止まったときは掲示板を非表示にして、
更新直後(30日ぐらい)だけ掲示板を表示しておく、という感じです。
なんでこんなことをしたいかというと、創作系サイトをやっているのですが、
長く更新しないと催促とかの書込みが続いて鬱になってくるからです。
(マメに更新してれば済む問題なのでしょうが…( ´Д‘))
処理としては
../history/history.log の更新日時を見て
指定した期間更新がなければ
<a href="bbs/bbs_opinion.cgi">感想掲示板</a> へのリンクを表示させない
(更新されればまた表示される)
ようにしたいのですが、どうやっていいか全くわかりません。
どうかご教示を…
0441nobodyさん
2006/01/25(水) 15:37:54ID:i7XMk+as別に簡単なわけだが。
どこまでやって、何でつまってるのかがわからん。
0442nobodyさん
2006/01/25(水) 15:46:41ID:???例えばDB使えるなら更新時(書込み時のこと?)タイムスタンプとっておくとか
filemtime()で更新時間をゴニョゴニョとか
//phpは時間の比較が面倒臭いね
0443nobodyさん
2006/01/25(水) 16:00:43ID:???2. 処理
3. sleep(2);
4. 処理
ロック解除
というスクリプトがあるのですが、ロボットのアクセスが1秒間に何回もある時、
ロックされた状態のままになって、一般の人がアクセスできなくなることは
あるのでしょうか?
上の処理中に次のアクセスがあった時は、ロックファイルが存在した時点で
すぐにエラーを出して終了させていますが、ひどいロボットだと何分間も
アクセスが続くので、その間、常にロボットに占められる状態になるのかを
教えていただけたらと思います。
0444nobodyさん
2006/01/25(水) 16:04:31ID:???常にってことは無いでしょう。連続でアクセスされたからって間に割り込めないわけじゃないんだから。
ロックが解除された次の瞬間にアクセスできた人が次に処理できるようになるだけかと。
もちろん、そんなに連続でアクセスされたら確率の問題で一般の人は繋がりにくくなるけどね。
0445443
2006/01/25(水) 16:22:39ID:???ありがとうございます。
やはり繋がりにくくなりますか。
検索エンジンのロボットはHTTP_USER_AGENTで拒否
できるんですが、巡回プログラムを使ったアクセスが
困るので、それを止める方法を考えるしかないですね。
0447nobodyさん
2006/01/25(水) 20:14:23ID:???面倒って感じるならプログラミングすんのに向いてないだけだろう
0448nobodyさん
2006/01/25(水) 20:53:35ID:NabcNoACこのサイトのように閲覧数を付けたいのですがどうしたらよいでしょうか
どうぞよろしくお願いします
0449nobodyさん
2006/01/25(水) 21:22:40ID:???0450440
2006/01/25(水) 23:49:12ID:???$newview = '720';//ニュー表示何時間? しない時は0
$newlogo = '<font color="#FF6699">new</font><br>'; //最新記事マークタグ
if($newview == 0 || ($newview*3600+$stmp) < $nowtim) $newlogo = "" ;
$nn.="[{$tim}] $newlogo$com<hr size=1>";//最新記事
----------
こんな感じのがあるんですが、
<font color="#FF6699">new</font> の部分を
<a href="bbs/bbs_opinion.cgi">感想掲示板</a>に入れ替えれば良さそうなんですが、
実際にどうやって取り込んでページに反映させられるのかわかりません..。
ご示唆のほどお願いします。
0452409
2006/01/26(木) 03:21:42ID:???ありがと。
早速使ってみ…と思ったのですが、
[:XXXX:]は、何パターンもあり、
preg_replace、preg_replace…と数分だけ書くと言う手もあるのかもしれませんが、
検索文字列に設定できません。
ブログで絵文字を使うような感じにしたかったのですが、
どのようにしたらいいのでしょうか。
0453nobodyさん
2006/01/26(木) 04:39:17ID:AR4L/VZ9ttp://php.s3.to/script.php
ここのカウンタを応用すれば?
0455nobodyさん
2006/01/26(木) 05:15:39ID:???0456nobodyさん
2006/01/26(木) 10:44:28ID:???[:XXXX:]にある程度固有のルールは無いのか?英数字しか使えないとか。
$str = preg_replace('/\[:\w+?:\]/e', 'emoji($1)', $str);
みたいな感じで[:〜:]を最短マッチで関数に引き渡せばできそうな気がするんだが。
0457456
2006/01/26(木) 10:45:49ID:???$str = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $str);
0458nobodyさん
2006/01/26(木) 11:16:55ID:???方法を思いつきません、どなたかアイデア・助言や分かりやすいサンプルソースのある場所を教え頂けないでしょうか。
再帰的な処理を行う方法がとんと浮かびません。
0459nobodyさん
2006/01/26(木) 11:23:50ID:8dMtV3IMやった事のある人はいますか?
いろいろ探したのですが、タグ情報の読み書きしか見当たりませんでした。
mp3の前と後ろをカットして中を結合して前と後ろを付け直すとかやってみたのですが、、、
mp3ってどうすればよいのでしょう。
0460nobodyさん
2006/01/26(木) 11:28:02ID:???その手の掲示板のソースを参考にすればいいんじゃまいか
>>459
ググればいくらでも見つかるわけで。つかphpで扱うな。
0461nobodyさん
2006/01/26(木) 11:29:29ID:RHnTs72Chttp://news19.2ch.net/test/read.cgi/news/1138239761/
実装してくれる奇特な方はいませんか?
0462nobodyさん
2006/01/26(木) 14:30:13ID:8dMtV3IMPHPでなくてもいいのですが、>>460 さんは何で扱いますか?
0463nobodyさん
2006/01/26(木) 15:04:41ID:???0464nobodyさん
2006/01/26(木) 15:13:38ID:8dMtV3IMキャッシュが残っていて結合されたファイルが鳴らなかっただけで、
単純に足せば鳴りました。
0465nobodyさん
2006/01/26(木) 15:56:54ID:IB58kw5L行うにはどうすればいいのでしょうか?
0466nobodyさん
2006/01/26(木) 16:03:50ID:P2h/kQrX例えば
$str='aaa';
という変数があり、
$wrap='aabcdeffaaabfue';
という変数の中から$strを大小区別無し検索するには
eregi($str,$wrap)
で動作しますが、
同じように
preg_match('/'.$str.'/i',$wrap);
でも動作するのでしょうか?
0467nobodyさん
2006/01/26(木) 16:06:46ID:P2h/kQrX正常に動きました
■ このスレッドは過去ログ倉庫に格納されています