314 :
nobodyさん :
2006/01/18(水) 01:07:48 ID:zQtemvMy
315 :
314 :2006/01/18(水) 01:14:07 ID:zQtemvMy
追記ですが…。 私は4.4.3正式版が出るまで、WindowsではPHP4.3.11を 使用することにしようと思います。 ($GLOBALの問題を考慮しても最近のPHPのバグを考えると…) 皆様はWinでの4.4.3-dev 4.3.11の選択をどの様にお考えになられますか?
316 :
299 :2006/01/18(水) 11:52:19 ID:???
snapshotを知らなかったヘタレです。
4.4.3-devで不具合は改善できてますね・・・。
>>315 完全なfixを期待できないからdevを使うのであって、
古いから安心ってわけでもないだろうしなぁ・・・
現実問題として、かたっぽが直っても別の部分で問題が出たりするから
品質管理が出来てるほうを選ぶ。
-devの付いたバージョンを使わなくちゃいけないって 辺りが、とても寂しかったりするんだけどね。
Mojavi3は永久にdevだ
Aというプログラム(自作)から全く別のBというプログラム(他人作成)に 変数(ID/PASS)を渡したいんですが、良い方法はあるでしょうか? GETを使うのはセキュリティ的にも論外な気がします。 ユーザ側からPASSは確認できないようにしていますので ブラウザからソースを見るとPASSが確認できてしまうPOSTも避けたいです。 そうなるとセッション()を使うところかと思うのですが、 Bプログラム側でセッションを考慮しようとすると非常に面倒な部分が あるのです。 何か他に良い方法はないでしょうか?
セッション変数をBにわたすラッパーを作る
>>319 BのID/PASS受け取り部分って自由にいじれるの?
だったらファイル経由とかDB経由とかにしてそのキーだけGETで渡すとか。
>>319 「全く別のBというプログラム(他人作成)」が現状でどのようなI/Fを持っていて
それを使う必要があるのか、または自分でI/Fをついかできるのか
AとBがネットワーク及びサーバでの位置関係がどうなってるのか、どのようにできるのか
その辺の情報がないと、手段が絞れないよ。
mixi は永久にベータ版
>>298 なんだ、その致命的なバグは。
それって正式リリース版のみのバグ?
4.4.2のdev使ってるんだが発生しないような・・・
session cookie get post 以外に別のphpに変数渡す方法ってあるの?
329 :
326 :2006/01/19(木) 01:03:27 ID:???
やっぱり問題ないわ、正式バージョンでも問題なかった。 fedora4+apache1.3環境で試してるけど、 apache2かwindowsあたりの問題かな?
>>328 serializeしてファイルやDBにとっておくってのもあるね。
あと環境依存だった気がするけどshmopとか。
画像ファイルをクリックしたら保存ウィンドウを開くようにしたいのですが、 これって結局apache側の処理(mimeだっけ?)であってphpでどうにかすることはできないの でしょうか?
>>331 違う、ブラウザの処理w
あとはcontentヘッダの問題でもあるが。
>>331 リンク先でheader()使ってContent-typeにoctet-streamを吐いてやればいいんじゃないかと。
>>331 >>334 いや、Content-typeはimage/pngやimage/jpeg等で、Content-dispositionをattachmentにするのがよいのではないかと。
以下、かなりテキトーだけど雰囲気だけ。
リンク元:
<a href="download.php?src=hoge.png"><img src="hoge.png" etc. /></a>
リンク先(download.php):
<?php
$src = $_GET["src"];
header("Content-type: " . image_type_to_mime_type(exif_imagetype($src)));
header("Content-disposition: attachment; filename=$src");
header("Content-length: " . filesize($src));
readfile($src);
?>
あとそれに加えてLast-modifiedやETagも送出し、リクエストヘッダからはIf-modified-sinceやIf-none-matchを読んで必要に応じて304 Not Modifiedを返す、とかするとより親切。
>>335 なにその脆弱性満載。
それはそうとPEARのHTTP_Downloadで一発ですよ。
>>336 いや、お前さんの言う脆弱性ってサニタイズしてるかどうかであってここでは別問題だろ。
話の論点がわかってないんだろうな。
>>335 download.php?src=/etc/passwd
画像をはき出す際に、有効期限を設定する方法を教えてください
>>338 みたいなお馬鹿さんがいるので注意書きしないとわからんらしい。
337を読んだんだか読んでないんだか。
(注意)
>>335 はHTTPレスポンスヘッダの例を提示することを意図したレスなので、コピペして使っちゃう横着な人はせめて正当性チェックくらいしてくださいね。
>>339 Expires:ってこと?
>>340 指摘されてからの後付ならば何とでも言えるね。
書き込み時点で、注意書きを書くくらいの配慮があればねぇ(藁
サニタイズ言うなキャンペーンなんてのもあるしな
じゃぁサニタイズ言うな言うなキャンペーンしようぜ
>>345 つーかサニタイズしなきゃいけないような作りが変というか。
表示してるファイルと同じものをダウンロードできるように
するっていう要求もなんか変な感じするけど、画像をサーバ
側で管理して動的にページ生成するんだから、ファイル名を
直接パラメータに取る必要ないよね。
>>346 手法を端的に示してるだけのサンプルだろ?
>>348 相手の本は初心者向けのPHP基礎参考本じゃまいか?
なんせ1番最初の「Hello Worldと表示させてみよう」のコードに いきなりセキュリティ対策がなってねぇ!とか突っ込む人だからなww
whoisの検索結果を表示するにはどうしたらよいのでしょうか?
>>350 「セキュリティ対策がなってねぇ!」
じゃなく
「初心者本のくせに教育的配慮がなってねぇ!」
だろ。
htmlだったから文句言われたんだよね 最初のサンプルを <?php $var = "Hello World"; echo $var; ?> にしとけば文句言われなかっただろうに
>>351 whoisの検索結果を表示すればいいです
そのネタ邪魔。 それとリンク先くらいちゃんと読め。
上の質問と似てるんだけど、 大容量ファイルをワンクリックで圧縮してダウンロードできる ようにしたいと考えてます、 上の方法で圧縮ファイル作成、ダウンロード、っていう2つに分けた 手順なら簡単なんだろうけど、いかんせん容量がでかいので 何か良い方法ないですかね、できれば圧縮しながらダウンロード、 みたいなのがあればいいんだけど。
>>357 pearを全く使ったことがないんですが、
マニュアル見ても全く理解できんのです、
というのもクラスとか(オブジェクト指向?)を完全に避けてここまで来たためです。
クラスを理解してなくてもpearって使えるでしょうか?
非常に初歩的なもので良いので
HTTP_Download::HTTP_Downloadあたりを使った例を書いてもらえないでしょうか?
>>358 おまえ、下らない質問スレの方があってないか?
>>361 引数に要求される型がboolでデフォルトがfalse
くだ質行け
363 :
nobodyさん :2006/01/20(金) 02:08:58 ID:Vc0sPXl7
はじめまして PHP4.4.2+Apache2.0.54(worker)を使用しています。 eAcceleratorを使用しようと思い、インストールしたのですが全く動作しません。 Googleで調べてみたところPHP5+Apache2でスレッドセーフなMPMを使用するとアクセルレーター系統は使えないという記事を見ました。 しかし、現在使用しているのはphp4で、Thread Safety enabledとphpinfoに書いてあったので使用できると思うのですが・・ やはり無理なのでしょうか?
>>363 いやだからThread Safety が enabled なんだろ?
はい。enableになっています。 もしかしてPHPがスレッド対応でもeAcceleratorがスレッドに対応していないのでしょうか。。?
>>365 「PHP5+Apache2でスレッドセーフなMPMを使用するとアクセルレーター系統は使えない」
という、そのままの症状が発生しているだけのようだが。
enabledの意味、わかってるよね?
367 :
nobodyさん :2006/01/20(金) 04:58:52 ID:qY5zGHnC
以前 「()の内容が真ならば虚を返す」 という関数を見た気がして探しているんですが どなたが心当たりのあるかたいますか。
>>367 気のせいかユーザ関数じゃねぇのか?
まあ近いところでempty()ってのはあるけど。
虚 (null?) じゃなくて偽 (false) を返すのなら empty() ですね。 で、$hoge が定義されていないときに if (!$hoge) すると Notice が出て、 if (empty($hoge)) ではエラーなし。
371 :
nobodyさん :2006/01/20(金) 07:50:35 ID:qY5zGHnC
>>368 >>369 >>370 どうやら自分がものすごい勘違いをしていたようです。
おそらく関数ではなく ! を使った式で正解だと思います。
説明についてもnullとfalseを間違えるなどお騒がせしました。
ありがとうございます、無事解決できました。
372 :
nobodyさん :2006/01/20(金) 09:40:24 ID:WExUI5wL
PHPのアップロードについて PHPって、ユーザーのアップロード処理が終わってからこちらで作成したPHPが起動しているようですが アップロード中から動かすことって出来ないですかね? アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。 環境は ・Linux ・Apache2.2 ・PHP 5.1.2 ですが、これが可能になるなら環境の変更も考えるかもしれません。
>>372 > アップロードの途中経過をユーザーに知らせたいんですが、今はupload_tmp_dirのファイルサイズを通知するという手段をとっています。
それで通知できてるんならいいんじゃないの?
374 :
372 :2006/01/20(金) 09:48:21 ID:WExUI5wL
>>373 できてるって言うか、ないよりマシな代物です。
upload_tmp_dirに作られるファイルは、当然ファイル名はランダムで、
どれがどのユーザーのファイルかは分からないんで、全ファイルのサイズを通知して
ユーザーに適当に推測してもらうしかないですし・・・
できるかどうか知らないけど JavaScript の範疇じゃないかなぁ PHP はリクエストを受けて、それに対してレスポンスを返すのが 仕事だから、リクエストの途中の話は知ったことじゃないと 思うんだけど。
376 :
545 :2006/01/20(金) 13:26:39 ID:yXtCuLJZ
PHPとJavaScriptの組み合わせしかないと思い込んでるのかもしれないけど、以下の問題についてご教授願います。 「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の値を取り出すことは可能なのでしょうか?
・・・・・・・・・・何がしたいんだ? どう考えても基本から分かってない。 PHPとJavaScriptの役割の違いを全く理解してないな。 そもそもどう考えたらPHPで送信済みの物を操作できると思えるのかと小一時間・・ PHPとは全く関係ない、JavaScriptスレに逝け
Ajax じゃねーかな
379 :
545 :2006/01/20(金) 14:17:24 ID:yXtCuLJZ
ガッツリ理解しますた。 onChangeで再読込みしてURLから渡すぐらいしかどうにもならんすよね。 ガッツリ理解しますた。 いや、つまりサーバ介さなきゃどうにもならんってことを理解しますた。
だから再読み込みしたくないなら Ajax だっつーのに
382 :
545 :2006/01/20(金) 14:57:33 ID:yXtCuLJZ
Ajax 初耳なんでちと調べてみます。 同時にdocument.forms[n].submit();の手動二段階Submitで何とかなる気もしてきた。 ありがとござんす。
ちょっとお尋ねします。 接続元のIPが一定範囲内になるかどうか調べるのって一発でできますか? たとえば以下のIPの範囲内に含まれているか否かが知りたい場合。 255.255.255.0 〜 255.255.255.15 接続元IPを最初文字列比較にして、最後だけ数値比較でやればできるわけですが...
ip2long()でなんとかならんか?
>>386 むかーし関数書いてこのスレかくだ質に書いた。
過去ログ嫁
みつからなそうだからヒントip2longとビット演算そしてサブネットマスク
390 :
385 :2006/01/21(土) 00:04:10 ID:???
391 :
nobodyさん :2006/01/21(土) 02:11:11 ID:xfElLr5F
PHPUnit2 を使っている人はいますか? php では構文エラーがでないのに、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 ~~~~~~~~~~~~~~~~~~~~~~~~~~
PHP で imode/vodafone/au 対応のサイトを作ることになったのだけど 参考になるソース ( アプリ、ライブラリなど ) を教えてくれませんか。
ググれ
394 :
nobodyさん :2006/01/21(土) 16:39:25 ID:jZKXWMZD
PEARのAUTHについて質問です。 addUserで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 "ユーザーを追加しました。"; } ?>
>>394 おいらの手元のある 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()関数を作ればいいのかも知れんね。(他への影響は知らん)
>>395 それならstrvalでも突っ込めばよさげだな
PHP4.4.1です。 アップロード掲示板で アップしたファイルの拡張子を取得する方法を教えて下さい。 よろしくお願いします。
398 :
^0^ :2006/01/21(土) 18:27:39 ID:NwQNGC9O
m9^0^
マニュアル読めって
402 :
394 :2006/01/21(土) 18:55:35 ID:???
>>395-396 ああ、なるほど、'cryptType'というのは
$cryptFunction($password)
の$cryptFunctionに入るんですね。
だから'cryptType'=>"strval"とすると
strval($password)となって平文が格納されると。
そしてやってみたら平文で格納されました。どうもありがとう。
勉強になりました。
403 :
391 :2006/01/21(土) 19:18:47 ID:???
>>391 自己レスだけれど、PHP のパスが PHP4 になっていたのが原因だった。
404 :
nobodyさん :2006/01/23(月) 12:01:54 ID:1NSQ7CLk
自分を呼び出している関数名を取得する関数ってありますか?
呼び出し元によって動作を変えたいとかいうことを考えているなら 悪いことは言わないからやめた方がいい もっと小さな関数を作るようにしろ
406 :
404 :2006/01/23(月) 12:34:43 ID:???
素直にそうします。
407 :
nobodyさん :2006/01/23(月) 12:48:38 ID:cMW2eJoC
質問ですが trueをあらわす数字は1で falseをあらわす数字は0で合ってますか
tarは扱えますか?
409 :
nobodyさん :2006/01/23(月) 14:31:16 ID:iSBxRO6m
テキストの中で、[:XXXX:]と言うモノがあったら、 DBと接続して、該当する画像を表示させたいのですが、 [:XXXX:]は1テキスト内に複数あり、 どのように置換したらいいのかわかりません。 DBと接続、該当する画像のURLを取ってくるところまでは わかるのですが…。 PHPのバージョンは4.3.11です。
>>407 厳密には違う。どちらも本来は数字ではない。
「数値」に変換した場合はtrue=1、false=0になるが、
「数字(文字列)」に変換するとfalseは""になるという挙動の違いが生まれる。
逆に同等の動きになる数値という意味ではtrueは0以外なら何でも、falseは0、となる。
>>409 mb_ereg_replaceまたはpreg_replaceでは置換時にPHPコードを実行するオプション(e)があるのでそれを使うのが楽。
再帰的にftp_mkdirしたいんだけどグッドな関数作ってくり!
知るか!
XOOPS入れたら下のようなデバック吐いた これなんかのモジュールたりないわけ? Notice [PHP]: Only variable references should be returned by reference in file include/functions.php line 547
エラーレベル下げれば?開発者じゃないならNoticeなんて要らんだろ。
重複行を削除する一番クールな方法はどんな方法でしょうか? 一番真っ先に考えたのが、一番上の行からfileで配列に入れて 総当りでチェックする方法なのですが、どうも効率が悪いような気がします。
>>418 file() → array_unique()
ftp関数でファイルを取得してブラウザからダウンロードするには どんな感じの手順を踏めばいいでしょうか?
>>420 ftpで接続。
ftpでファイルget。
header出力。
ファイル内容出力。
>>421 ftpでgetした際に必ず一時ファイル等を作成する必要がありますか?
ダウンロードのためにサーバ側でも一時的に容量を消費してしまうことが
若干ナンセンスに感じますがしょうがないでしょうか?
>>422 ftpでファイルを作らずにgetできるなら一時保存しなくてもいいが?
>>423 どんな関数を使えば良いでしょうか?
ftp_fgetだとオープンしてるファイルに一旦書き込む必要がありますよね、
ftp_getでもサーバ側に一旦保存する必要がありますし。
あるHTMLファイルからの抽出方法で分かりません。 HTML中に<h4>が出てきた場合、その場所から数えて最初の空行までの範囲を抽出したいのですが、 以下のところで止まっています。 if (preg_match("/^<h4>/",$line)){ print_r($line); } ここからどうすればよいのでしょうか? while (preg_match("/^$/",$line)) { break; } ↑これでは上手く行きませんでした。
>>424 すまん。遠回しに書いた俺が悪かった。
> ftpでファイルを作らずにget「できるなら」
PHPの標準にはそんな関数は無い。
記憶違いで無ければPEARのNet_FTPにすら無い。
つまり一時ファイルを作るしかないってことだ。
ま、自力でFTP通信を一から書けば何とかできるかもしれんがな。
>>425 エレガントにやる方法はいくらでもあるだろうが
面倒くさいからフラグ変数のON/OFFで処理しちゃえば?
>>427 アドバイスのおかげでようやく出来ました。
ありがとうございます。
431 :
nobodyさん :2006/01/25(水) 04:02:05 ID:B3uQ6LQK
function や for の関数の中にif構文を入れたらエラーになるんですが うまく動作する方法はないでしょうか。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>"; }
>>431 ただの構文ミス
for ($a = 1; $a !== 1; $a++;) {
↓
for ($a = 1; $a !== 1; $a++) {
433 :
nobodyさん :2006/01/25(水) 05:40:59 ID:B3uQ6LQK
>>432 ありがとうございます、いかに変更したところ正常に作動しました
for ($a = 1; $a !== 2; $a++) {
またif構文が正常に作動しなかった理由もわかりました。
()の中が空っぽでもTrueになると勘違いしていたことが原因でした。(実際はFalseになってしまうのですね)
>>433 マニュアル嫁。
読む気ないならせめてくだ質に池
if () の中身空っぽっていったい何をしたいのだろう…
そもそもifやforを関数とか呼んでる辺りからして(ry
437 :
nobodyさん :2006/01/25(水) 12:29:49 ID:B3uQ6LQK
>>437 > その一文はただの誤植です。
二文あるようだが。
>>431 > function や for の関数の中
> 関数の中に関数を入れないと
>>437 ということはだ。まだ文字面しか飲み込めてないんだな。
if や for や function, while などが「意味」としてまだ理解できてない。
頑張れ。
更新履歴スクリプトなどのログファイルが一定期間更新されなかった場合、 自動的にページ内から掲示板へのリンクを消すといった処理ってできないでしょうか? 更新が長く止まったときは掲示板を非表示にして、 更新直後(30日ぐらい)だけ掲示板を表示しておく、という感じです。 なんでこんなことをしたいかというと、創作系サイトをやっているのですが、 長く更新しないと催促とかの書込みが続いて鬱になってくるからです。 (マメに更新してれば済む問題なのでしょうが…( ´Д‘)) 処理としては ../history/history.log の更新日時を見て 指定した期間更新がなければ <a href="bbs/bbs_opinion.cgi">感想掲示板</a> へのリンクを表示させない (更新されればまた表示される) ようにしたいのですが、どうやっていいか全くわかりません。 どうかご教示を…
441 :
nobodyさん :2006/01/25(水) 15:37:54 ID:i7XMk+as
>440 別に簡単なわけだが。 どこまでやって、何でつまってるのかがわからん。
>>440 例えばDB使えるなら更新時(書込み時のこと?)タイムスタンプとっておくとか
filemtime()で更新時間をゴニョゴニョとか
//phpは時間の比較が面倒臭いね
1. ロックディレクトリを作ってロック 2. 処理 3. sleep(2); 4. 処理 ロック解除 というスクリプトがあるのですが、ロボットのアクセスが1秒間に何回もある時、 ロックされた状態のままになって、一般の人がアクセスできなくなることは あるのでしょうか? 上の処理中に次のアクセスがあった時は、ロックファイルが存在した時点で すぐにエラーを出して終了させていますが、ひどいロボットだと何分間も アクセスが続くので、その間、常にロボットに占められる状態になるのかを 教えていただけたらと思います。
>>443 常にってことは無いでしょう。連続でアクセスされたからって間に割り込めないわけじゃないんだから。
ロックが解除された次の瞬間にアクセスできた人が次に処理できるようになるだけかと。
もちろん、そんなに連続でアクセスされたら確率の問題で一般の人は繋がりにくくなるけどね。
445 :
443 :2006/01/25(水) 16:22:39 ID:???
>>444 ありがとうございます。
やはり繋がりにくくなりますか。
検索エンジンのロボットはHTTP_USER_AGENTで拒否
できるんですが、巡回プログラムを使ったアクセスが
困るので、それを止める方法を考えるしかないですね。
>>442 strtotime() 使えばいいんじゃね?
面倒かなぁ?
時間の比較なんてどの言語も似たりよったりだ。 面倒って感じるならプログラミングすんのに向いてないだけだろう
448 :
nobodyさん :2006/01/25(水) 20:53:35 ID:NabcNoAC
くだらねー
450 :
440 :2006/01/25(水) 23:49:12 ID:???
ちょっと心当たりのあるphpスクリプトで $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>に入れ替えれば良さそうなんですが、 実際にどうやって取り込んでページに反映させられるのかわかりません..。 ご示唆のほどお願いします。
>>450 そりゃホントに表示の部分だけで、肝心の更新日時を取得してる部分が無いよ
452 :
409 :2006/01/26(木) 03:21:42 ID:???
>>412 ありがと。
早速使ってみ…と思ったのですが、
[:XXXX:]は、何パターンもあり、
preg_replace、preg_replace…と数分だけ書くと言う手もあるのかもしれませんが、
検索文字列に設定できません。
ブログで絵文字を使うような感じにしたかったのですが、
どのようにしたらいいのでしょうか。
453 :
nobodyさん :2006/01/26(木) 04:39:17 ID:AR4L/VZ9
koreaに反応したんだお
>>452 [:XXXX:]にある程度固有のルールは無いのか?英数字しか使えないとか。
$str = preg_replace('/\[:\w+?:\]/e', 'emoji($1)', $str);
みたいな感じで[:〜:]を最短マッチで関数に引き渡せばできそうな気がするんだが。
457 :
456 :2006/01/26(木) 10:45:49 ID:???
()付け忘れた $str = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $str);
掲示板のような親子関係が永遠に分岐する可能性のあるツリー表示がしたいんですが。 方法を思いつきません、どなたかアイデア・助言や分かりやすいサンプルソースのある場所を教え頂けないでしょうか。 再帰的な処理を行う方法がとんと浮かびません。
459 :
nobodyさん :2006/01/26(木) 11:23:50 ID:8dMtV3IM
複数のmp3ファイルを1つにファイルに結合してダウンロードさせたいのですが、 やった事のある人はいますか? いろいろ探したのですが、タグ情報の読み書きしか見当たりませんでした。 mp3の前と後ろをカットして中を結合して前と後ろを付け直すとかやってみたのですが、、、 mp3ってどうすればよいのでしょう。
>>458 その手の掲示板のソースを参考にすればいいんじゃまいか
>>459 ググればいくらでも見つかるわけで。つかphpで扱うな。
461 :
nobodyさん :2006/01/26(木) 11:29:29 ID:RHnTs72C
462 :
nobodyさん :2006/01/26(木) 14:30:13 ID:8dMtV3IM
すみません。ググっても見つからないのでこちらで聞きました。
PHPでなくてもいいのですが、
>>460 さんは何で扱いますか?
だからツリー型の掲示板探して中を見てみればいいのに…
464 :
nobodyさん :2006/01/26(木) 15:13:38 ID:8dMtV3IM
>459, >462です。すみません。できました。 キャッシュが残っていて結合されたファイルが鳴らなかっただけで、 単純に足せば鳴りました。
465 :
nobodyさん :2006/01/26(木) 15:56:54 ID:IB58kw5L
.htaccessのような感じに個別でCGI版PHPのmax_execution_timeの設定を 行うにはどうすればいいのでしょうか?
466 :
nobodyさん :2006/01/26(木) 16:03:50 ID:P2h/kQrX
PHP 4.4.2を使用しています 例えば $str='aaa'; という変数があり、 $wrap='aabcdeffaaabfue'; という変数の中から$strを大小区別無し検索するには eregi($str,$wrap) で動作しますが、 同じように preg_match('/'.$str.'/i',$wrap); でも動作するのでしょうか?
467 :
nobodyさん :2006/01/26(木) 16:06:46 ID:P2h/kQrX
自己解決しました、 正常に動きました
>>461 仕様書を出せ話はそれからだ。と言うかそれ以前にスレ違い
469 :
458 :2006/01/26(木) 16:17:19 ID:???
>>463 私じゃありませんっ
><
ソース見ても分かりませんがね・・
分かるまでじっくり見てみようと思います
複数の子を持つツリー構造を順番に巡るだけでは・・? まぁ、頑張ってソース嫁
>>469 掲示板だとして、一つの案だが
記事ごとにクラスを作る
個々の記事には独立した ID を振っておく
親配列、子配列をメンバ変数に持ち、直接の親、直接の子の ID が
ここに収まる
表示の起点となる ID を指定して、そこから例えば親は直接の親だけ
子はエンドレスで取得して表示
なんて風にやってみるって手はあるかな。
もっと効率のいい方法があると思うけど。
472 :
nobodyさん :2006/01/26(木) 17:25:26 ID:ZWELklYb
PHPでGETのクエリがあると特定箇所へのリンクができません。 1.php $str = "<a name=test1></a>"; 2.php <a href="1.php#test1?mode=asdf"> 仕様とかでしょうか?それとも可能?
PHPのお役立ちサイトとかないですか? 初心者向けのインストールガイドとかしてくれるサイトです。。。 WIKIを使いたいんですけどよくわかんなくて困ってます…。
>>465 くだ質。
PHP_INI_ALLだから、php.iniでもini_set()でも好きなように。
>>474 ・wikiを使いたい→wikiスレ
・レンタル鯖に設置したいけど方法が分からない→レンタル鯖板
・PHPのインストール方法が分からない→分からない点を書きアドバイスを求める (質問の内容によっては 自宅サーバ板)
PHPのインストールってのが何を指すのかよく分からない。
まぁ、wikiを設置したいけどやり方が分からないんだとエスパー
って事でこの板のwikiスレに行って、設置先の名前、設置するwikiの名前、それと分からないポイントを書けば誰か教えてくれるかもよ
478 :
472 :2006/01/26(木) 17:50:14 ID:ZWELklYb
>>473 マジサンクス。マジ俺アホス。一発で解決しました。50円あげるお^^
つ IIII
PHPで簡単な登録フォームを作成しています。 名前[ ] 内容[ ] 【プレビュー】【送信】 という表示だとして、プレビューのボタンを押した時に別ウィンドウが開いて 入力した内容が確認できる。 送信のボタンを押すとそのまま送信できる。 というのを考えているのですが、プレビューも送信もどちらもsubmitボタンとした場合、 formのaction先には1つのファイルしか指定できないわけで、どうすればいいか 迷っています。(プレビューと送信完了のページは別ファイル) 説明が下手ですみませんが、何かアドバイスをいただければと思います。
>>480 Submitの名前で判断すれば良いんじゃないかな?
>>480 確認しないで送れるんだけど、それでいいの?
中身空っぽのやつとかいたずらし放題なわけだけど。
>>482 ブログとかだって確認と送信あるから良いんじゃない?
484 :
480 :2006/01/26(木) 19:01:55 ID:???
>>481 その「Submitの名前」というのは、例えば以下のような事ですか?
<form action="test.php" method="POST">
ソース
<input type="submit" name="preview" value="プレビュー">
<input type="submit" name="entry"value="送信">
で、test.phpでifでsubmitからのnameを判別して
プレビュー用ならpreview.phpをincludeして、送信用ならentry.phpをinculdeするような。
>>482 確認はプレビューでするので、実際は登録されていない事になります。
>>484 オレだったら、hiddenだらけの別formを用意して、
プレビューはjavascriptで上記フォームを介して行い、
送信は普通にsubmitするかな。
もちろん、javascript offの環境ではプレビューできないけどw
487 :
nobodyさん :2006/01/26(木) 22:50:15 ID:XYYPwXMi
PHPで0から50までの乱数を出したい場合 rand(0,50); で0以上50以下が出力されるのはわかったのですが srand(初期値); のsrandの使い方がいまいちわかりません。 0から50までの乱数を出す場合はsrandの初期値はどのように 設定すればいいのでしょうか?
PHPを使ってHTMLにアクセスした際に文章をパソコン向けと携帯向けの表示振り分けを行いたいのだけど とりあえずわかったのが、UserAgentで携帯端末情報を読み取るまではわかったが、それから先が一向に進まぬ 教えて下さい。大先生方!!
>>487 http://www.php.net/srand > 注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。これは、この処理が自動的に行われるためです。
つまり4.2.0以降のバージョンではsrandを書かなくていい。
ちなみに以前のバージョンでsrandを書く場合引数にはtime()などのランダムになりやすい値を与える。
つーかsrand(time())にするべし。
>>488 そこまでわかったのにどうして先に進めないのさ?
ifとかswitchとかincludeとかファイル入出力とかDBとか適当に組み合わせるだけだよ。
PHPで既存のスクリプトを改造してます。
>>490 いきなりそんなことを言う貴方はだぁれ?
493 :
nobodyさん :2006/01/27(金) 14:07:06 ID:lsupN3af
494 :
nobodyさん :2006/01/27(金) 17:14:49 ID:zienXgmO
PHP4系から5.1.2にアップデートしたら、 $test = 'hoo'; echo $test['bar']; で「h」が出力されるようになったのですが、 ($test['bar'] が $test[0] と評価されている?) こういう仕様に変わったんでしょうか?
>>494 PHP4.0.1辺りから色々試したけど同じように「h」が出力されたぞ。
「存在しない添字は0として評価される」なんて公式な仕様はないと思うので、
仕様ではないと思うけど。
キモい挙動だけど仕様でしょ。 連想配列に添字でアクセスしようとしてるんじゃなくて、オフセットを指定して 文字列にアクセスしようとしてて、string "bar" が int 0 にキャストされてるだけ。
データベース抽象化しようと思うんだけど、良い感じの奴を教えておくれ。 php 4、MySQL、PostgreSQL 対応で。
>>495 存在しない添え字っつーか、それは文字列型への桁位置アクセスだからな。
配列とは違って数値しかありえない。よって[0]扱いが正しいと思われ。
ちなみに文字列への $hoge[0] 表記は過去互換で残されてるけど推奨はされない。 できれば $hoge{0} と書いた方がいい。
503 :
nobodyさん :2006/01/28(土) 03:53:00 ID:vNPPStC0
PHPのuniqid()って どのくらいユニークなのかな? ミリ秒を種にしているとのことだけど 無限にユニークであり続けることなんて不可能だし。 UNIXタイムの限界くらいまでユニーク?
>>503 uniqidは現在時刻をマイクロ秒単位(マニュアルにはミリ秒って書いてあるけど)でそのまま16進表記しただけなので、2038年(だったっけ?)のいつだかまでの間に1マイクロ秒のズレもなく同時にuniqidを呼び出さない限りは確実にユニーク。
echo uniqid(), "\n", uniqid();ってやっても多分ちょっとはズレる。
ちなみにUNIXタイムスタンプの最大値0x7FFFFFFF(約20億)に100万を掛けた数の膨大なuniqidが存在し得る。
以下はソースのext/standard/uniqid.cから一部抜粋
> /* The max value usec can have is 0xF423F, so we use only five hex
> * digits for usecs.
> */
> if (more_entropy) {
> spprintf(&uniqid, 0, "%s%08x%05x%.8f", prefix, sec, usec, php_combined_lcg(TSRMLS_C) * 10);
> } else {
> spprintf(&uniqid, 0, "%s%08x%05x", prefix, sec, usec);
> }
spprintfっていったい何だ?w
505 :
503 :2006/01/28(土) 09:32:11 ID:???
>>504 なるほどー
分かりやすい説明ありがとう!
main/spprintf.c
Debug Build をNOにしたいのだけど
したいのだけど・・・?
したいのならすればいい。
510 :
nobodyさん :2006/01/29(日) 15:22:58 ID:mSKJalfC
DBに格納したデータを、先頭の"The"を抜いた条件で昇順でソートする方法ってどんなんでしょうか? 例>> Aaa The bbb Ccc これが思いつきそうで思いつかない……orz
HAHAHA、そうか!それ程言って欲しいのか!それならば言ってやろう!! ス レ 違 い
SQLのお話ならDB板へ。その時は使用しているDB名もお忘れなく。
513 :
510 :2006/01/29(日) 15:43:09 ID:mSKJalfC
>>512 これってDBの話なの?
DBからは素直にとってきて、配列にして、PHP側でさあどうソートするかって話だと思ったんですが……。
>>513 >これってDBの話なの?
「DBに格納したデータを」って書いてるじゃないか。
文面通りに解釈すると「DBに格納したデータを特殊な条件付でソートし結果を受け取りたい」と読める。
だから、「どこがPHPの質問なの?」と突っ込まれたわけよ。
まぁ、usort でも使ってユーザ関数でソートしたら?
515 :
510 :2006/01/29(日) 16:40:58 ID:???
>>514 そうか。言葉が足りませんでした。ごめんなさい。
usortでいじってはみてるんですが、これがなかなか……orz
ソース晒して分からない箇所を下質スレで聞くと誰か相手に(ry
517 :
510 :2006/01/29(日) 16:55:30 ID:???
>>516 わかりました。後はそちらに移動します。
どうもありがとうございました。
001に1を足して002、また1を足して003としていきたいのですが、 どういった方法があるでしょうか?
520 :
518 :2006/01/30(月) 00:12:30 ID:???
カウンターで複数桁を使用したいと考えています、 1を2にするのは簡単ですが、 01を02にするのはかなり面倒そうですので。
>>520 あとで画像カウンタとか言うなよ
sprintf を調べろ
>>520 計算自体は桁考えずに行って、最後に表示するときだけ
printf("%03d", $cnt); と3桁化すりゃいーよ。
523 :
518 :2006/01/30(月) 00:27:03 ID:???
ありがとう!!
524 :
nobodyさん :2006/01/30(月) 01:39:35 ID:gG8yFj6C BE:356457784-
ごめんなさい、↓なんですけど 自分で「短い文字でもちゃんとSJIS→JISに変換できるように!!」 と入れた処理なんですが、後から見て何をやっているか わからなくなってしまいました。 /* 文字数が少ないとエンコードに失敗するんだとさ。*/ $message = "あいうえお眉幅ABC".$message; $body = mb_convert_encoding( $message , "JIS", "EUC-JP,UTF-8,SJIS,ASCII,JIS"); $body = substr ( $body , 3 + 14 + 3 + 3 ); @なぜ「"あいうえお眉幅"」ではなくて「"あいうえお眉幅ABC"」なのか A最後の「3 + 14 + 3 + 3」の詳細 解読できる人がいたら助けてください。。。。
くだ質行けばかちん
526 :
nobodyさん :2006/01/30(月) 02:00:17 ID:gG8yFj6C BE:601522496-
527 :
nobodyさん :2006/01/30(月) 09:39:33 ID:JutOeLmX
クラス名でタイプヒンティングすると一切のデフォルト引数が無意味になるけどこれは仕様と思ってあきらめるしかない? nullを渡せたらまだよかったんだけど。 もしくはデフォルト引数にnewを書けたらまだよかったかも。 タイプヒンティングせずに関数内でinstanceofしか方法はないかな? よりよい型の制限方法あったら教えてください。
>>524 @英語もテストしたいから
A数が大きくて同時に計算できなかった
php.ini の memory_limit を抑えて、DLさせる為にflushを利用しているのですが、巧く動作しません。 何かご存じの方、ご教授願います。 ・実メモリ 128Mbytes ・DLファイル 1Gbytes ・直アクセスはしない ・DLダイアログは直ぐに出る ・https経由 DL部分のコードは下記の通りです。 ob_start(),ob_end_flush();を組み合わせても×でした。 $fp=fopen($FNAME,"rb"); while(!feof($fp)){ echo fread($fp,4096); flush(); } 環境 apache 1.3.33 php4-4.4.1_1
530 :
529 :2006/01/30(月) 19:28:04 ID:???
素のコードで巧く行きました…。 これから切り分けて、後で報告します。 お騒がせしました。 test.php <? $file="test.zip"; header("Content-Type: application/octet-stream;"); header("Content-Disposition: attachment; filename=$file"); ob_end_flush(); readfile("data/$file"); ?>
531 :
nobodyさん :2006/01/30(月) 20:56:32 ID:EJ05v1/F
ご教授お願いします POSTでwavのバイナリデータが飛ばされてくるシステムでデータを保存するのに pack関数を使用して保存すれば良いのでは?という所まではたどり着いたのですが どのように使用するのかがマニュアルを見たのですが今ひとつ分かりませんでした どなたか使い方分かる方教えていただけませんか? $data = urldecode($_POST['wavdata']); $fp = @fopen("./data.wav","wb"); fwrite($fp, pack("[この部分がわかりません]",$data)); fclose($fp);
>>531 その前に何でそのシステムがRFC1867に基づく
ファイルアップロードを行わない(させない)のか教えてくれる?
Webブラウザ以外の特殊(といっていいのかな)なクライアントでも対応してる
場合が多いと思うけど。PHPでもアップロードのクラスがPEARにあるよ。
533 :
nobodyさん :2006/01/30(月) 21:46:56 ID:/1xdn91h
×ご教授 ○ご教示
534 :
531 :2006/01/30(月) 21:47:09 ID:???
>>532 私もシステム開発元になぜRFC1867に基づくファイルアップロード
を使用できないのか聞いたのですが、
開発元で作成したデータ保存後にFTPで送信するCGIを使用するか
もしくは自分で何とか出来るならしてください
の一点張りで結局教えてくれませんでした。
現在はつなぎとして開発元が提供しているFTPのCGIを使用していますが
とにかく遅いので自前で何とかしようと今回の書き込みとなりました。
>>534 それを読んだ限りだと、開発元が作成したのはデータ保存後FTPで送信する物であり、POSTでバイナリを送りつける妙な仕様の物ではない
つまり、その妙な物を作ったのは貴方だと受け取れるが、そうなのか?
仮にそうなら、そんな妙な仕様の物を作るのはやめて、RFC1867に基づくファイルアップロードをやってくれる物を使うべきだ
まぁ・・そもそも、遅いのはFTPするCGIが原因なのか?とか作って時間の無駄だったと気付きそうな香りが・・・。
お絵描き掲示板みたいにJavaアプレットが自力でバイナリを生成して
それを標準出力(=POST)で送ってくる、とかの類じゃないの?
で、巷のお絵描き掲示板でそういう処理は実際にやってるから
ソース見てみたら参考になると思う。
参) PHP製のお絵描き掲示板 >
ttp://www.punyu.net/
ちなみにお絵描き掲示板の場合は、一定のヘッダの後に 生のバイナリデータがそのまま送信されてくるので、 urldecodeだのpackだのは要らないです。 ヘッダで指定されたサイズで受信してそのまま保存。 なので、全然違う仕様の可能性も高いけど、それ以外に そんな変な仕様になる理由が思いつかなかったので。
538 :
531 :2006/01/30(月) 22:22:57 ID:???
>>535 開発元がPOSTでバイナリデータを送っいるといっていますので
こちらでわざわざ妙なつくりにしたということはありえません。
FTPが遅いのは流れから言っても確実です
FTPを使用した場合
CGIにデータ渡す>データをエンコード後保存>FTP接続しこちらのサーバーへ>ファイル公開
FTP使用しなかった場合
データをエンコード後保存>ファイル公開
539 :
531 :2006/01/30(月) 22:51:32 ID:???
>>536 ありがとうございます
ためしてみます
報告はまた後ほど
540 :
452 :2006/01/31(火) 00:20:15 ID:+LWq5c8/
>>456 >>457 亀ですんません。
[:XXXX:]は[:はーと:]と言ったように、
ひらがなで統一しようと思ってました。
でも、英数字でも問題ないです。
preg_replaceだと1個しか置換できないのかと考え、
preg_match_allで、[::]内のひらがなを抜き出し、
ループで回して該当する画像を表示させようと思ってたのですが、
>>456 さんのやり方の方がいいのでしょうか。
正規表現がよくわからなくて、
調べてはみたものの、
ちぐはぐな返答かもしれません。
ごめんなさい。
---------------------------------------------------------
$text = 今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。
---------------------------------------------------------
$textを表示させるときに、[:hare:]=太陽の画像、[:ame:]=傘の画像を
表示させたいのです…
541 :
531 :2006/01/31(火) 00:50:36 ID:???
>>536 完全なテスト環境が家に無いので確実とはいえませんが
教えていただいたもので何とかなりそうです
みなさんありがとうございました
>>540 なんとなく、こんな感じかな?
ってか、正規表現くらい勉強しろ。”調べる”のではなく、”勉強”だ。
あと、
> preg_replaceだと1個しか置換できないのかと考え、
”考え”ではなく、試せ。せっかく
>>456 が良い回答しているのに・・・。
以下、動作未確認スクリプト。
//
$text = "今日は天気[:hare:]がいい!明日は雨[:ame:]らしい。";
$text = preg_replace('/\[:(\w+?):\]/e', 'emoji($1)', $text);
function emoji($code) {
// 以下、DBに接続できていると仮定
$imageFileName = "";
$result = mysql_query("SELECT imageFileName FROM table_name WHERE emojiCode = '{$code}'");
if (mysql_num_rows($result)) {
$imageFileName = "<img src=\"".mysql_result($result , 0)."\">";
}
return $imageFileName;
}
543 :
nobodyさん :2006/01/31(火) 01:41:28 ID:kuYyOVO4
他鯖のファイル取りに行く時にIf-Modified-Sinceとかヘッダ送りたい時は fopenとかじゃ無理だよね。 自前でサーバーにつないでhttpリクエスト書かなきゃダメ? もしくはそういうステキなラッパーがあれば・・・
>>540 ちょっと調べてみたけど、sjisかeucだったら2バイト目にコロンと同じコード(3A)が来る文字はないから
>>542 の正規表現を'/\[:(.+?):\]/e'にすれば問題なくマルチバイト混在可能になるはず。
ただUTF-8の場合は2バイト目以降全てのコードがありえるらしいから : の直後に ] があると意図しない結果になるかも。
JISは終端エスケープが完全なら問題なし。
545 :
nobodyさん :2006/01/31(火) 01:50:48 ID:b+k1eFbT
PHPにて、関数を使ってフィボナッチの計算をしてみたかったのですが、どうにもうまく できません。プログラムは以下のようにやっています。 <?php $n; $i; function fib($n){if($n==1){return 1;}else if($n==0){ return 0;}else{return fib($n-1)+fib($n-2);}} for($i=0;$i<=20;$i++){print("fib($i)");} ?> そして結果が、 fib(0) fib(1) fib(2)・・・fib(20) のようになってしまい、ちゃんとした値がでません。 計算の仕方自体は間違っていないと思うのですが、functionのあたりが間違って いるような気がしないでもありません。 echoや&をつけたりといろいろしているのですがうまくいきません。 何が違うのか、どうすればいいのかを、どうか教えて下さい。お願い致します。
>>543 PEAR の HTTP_Request を使うといいよ
>>540 人の回答を信用する気がないなら
最初から質問なんてしなきゃいいのに
>>545 print("fib($i)"); → print(fib($i));
print("fib($i)") ってのは文字列に$iの値を埋め込んで出力するって事、つまりfib()を関数として認識してない。
それと動作しないのとは関係ないけど、最初に書いてる$n; $i; は不要。$i は for($i=0; ...) で初期化されてるし、$n は使われてない。
まぁ次からは下質スレにおいで
下質住人キタコレw
550 :
545 :2006/01/31(火) 02:26:33 ID:???
>>548 ありがとうございます、おかげできちんと表示させる事ができました。
わかりやすい説明もどうもありがとうございました。
551 :
540 :2006/01/31(火) 09:12:48 ID:2n+xF/sd
ありがとうございます!
>>547 信じてなかったわけではなく、理解できなかったわけで…。
コレを機会にちゃんと勉強します。
かなり甘えすぎてしまってごめんなさい。
答えてくれた皆さん、本当にありがとうございました
m(__)m
>>551 str_replace()やpreg_replace()の置換対象の仕様なんて正規表現と何の関係もないし
553 :
543 :2006/01/31(火) 20:03:14 ID:???
>>546 おー、すごい楽そう。
使ってみます!
ありがとうございますー。
すごい楽しそうなのかと思った
$array = array("aaa","bbb","ccc"); みたいな配列を $res["aaa"]["bbb"]["ccc"] = 1; のようにするのってどうやってやる? evalは使わないで。
>>555 $res[$array[0]][$array[1]]][$array[2]]] = 1;
557 :
555 :2006/02/01(水) 00:22:23 ID:???
>>556 すんません、 $array の長さが不定なんです。
3つ固定ならそれでいいんですが。
>>555 $array = array("aaa","bbb","ccc");
$ref =& $res;
foreach($array as $k) $ref =& $ref[$k];
$ref = 1;
555じゃないけどプチ感動した。 なんかいろいろ応用できそうだ。
array_rand -- 配列から一つ以上の要素をランダムに取得する とあったのですが、 配列の1行目の要素を拾う場合は array_ なんと入れれば良いのでしょうか?
561 :
560 :2006/02/01(水) 12:15:45 ID:???
あ、すみません $data[array_rand($data)]; こういう書式だったんですが
563 :
560 :2006/02/01(水) 13:17:08 ID:???
あ、すみません <? $data_file = "data.csv"; $row = array("7"); $num = count($row); $data = file($data_file); for($j = 0; $j < $num; $j++) { $result = $data[array_rand($data)]; $val = explode("\t", $result); echo $val[$row[$j]] . "<br>"; } ?> こういうプログラムで、data.csvの一番上のデータ行の、8列目の文字列を取り出す、 というのをやりたいんですが $result = $data[array_shift($data)]; ではダメだった…
えーっと、$data[0]ってことかな?
565 :
529 :2006/02/01(水) 13:53:53 ID:???
memory_limit の問題にハマっています。 ご存じの方、教えて下さい。 このコードは8M超のファイルがDownload可能である事を確認しました。 --------- [php.ini] memory_limit = 8M ------------ [test.php] $content_size = filesize("$FNAME"); header("Content-Type: application/octet-stream;"); header("Content-Length: ".$content_size); header("Content-Disposition: attachment; filename=\"$SRCFILE_SJIS\""); flush(); ob_end_flush(); readfile($FNAME); ------------ しかし、上記と全く同じものを、ファイル名($FNAME)選択する PHP中に含ませると下記のエラーが出ます。 Allowed memory size of 8388608 bytes exhausted (tried to allocate 8209774 bytes) php.ini の memory_limit を超えてDownlloadできる方法は これで合っているのですが、解決方法や問題点をご存じの方、ご指摘願います。 (小さなファイルはDownload出来ています)
>>565 > ファイル名($FNAME)選択するPHP
これが何やってんだかわからん。
無駄な処理を挟んでないか?
567 :
529 :2006/02/01(水) 15:26:49 ID:???
>>566 ファイル選択の前に、ID/PASSの認証と、sessionを利用してます。(同じPHPコード内)
ロジックとして以下のフローとなっています。
認証 → .認証をSessionで保持 → ファイル選択 → .DL
もちろん、前段の部分が原因になっているとは思うのですが、
外すわけには行かず…。orz
DLに関しては、上記PHPコード部分で(ほぼ)独立した世界であると
考えておりましたが、甘かったようです。
最悪、外に fget.php を用意して、引数を与えて
DLさせるようにしてみようと思いますが、
何かしら解決手段、原因など判る方はご指摘願います。
>>567 前段でグローバル変数とか使いすぎてるんじゃないのか。
ダウンロードのとこ、readfile()で一気読み&出力しないで
fgets+fwriteのループ処理にしてやればいきなり8MBもメモリ確保するようなことはなくならない?
なんかPerl辺りじゃ常識的な省メモリ動作のロジックなのに(やらんやつはタコ呼ばわり)、
PHPの開発者って便利関数に頼りすぎて丸っきり無視する傾向にあるよな。
ファイルがあったら何でも配列に丸ごとぶちこめ!みたいな。
>>568 >PHPの開発者って便利関数に頼りすぎて
これはあるな。GETのQUERY_STRINGが自前のコードでパースできない奴とか。
便利なものを使わずに、わざわざ不便なやり方をしろとは言わないけど。
ま、それがPHPのいいとこでもあるんだがな。
571 :
529 :2006/02/01(水) 16:56:19 ID:???
>>568 レスどうも。 色々試してみた結果のご相談です。
>>529 読み込みバッファ固定+ループで吐き出し
大きなファイル×
小さなファイル ○
>>565 メモリ食わないように、強制バッファリング無し(ob_end_flush();)で吐き出し、(+flush系関数での試行錯誤。)
大きなファイル×
小さなファイル○
という結果で、路頭に迷っている訳です。
実は「強制バッファリング無し等が有効にならない条件」があって、
それにハマっているんじゃないかと思う次第です。
ともかく、下手打ってphpに100Mとか、1Gとかメモリを
食われるのはご免なので、もう少し苦しんできます。
>>571 Allowed memory size of 8388608 bytes exhausted は
PHPの変数で確保しようとしたメモリが足りないときのエラーだから
バッファリングのフラッシュとかは全然関係ないと思うぞ。
あと、ob_end_flashってob_start以降の出力制御をかけたときのフラッシュ処理で
ob_startを使ってないなら何の関係もない。
読み込みバッファ固定+ループってやつがやり方間違ってるとかじゃないの?
WinXPでshell_execでxcopyコマンド使うにはどうしたらいいでしょうか? echo shell_exec("xcopy /?"); で走らせた所 'xcopy' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出て使えませんですた
>>573 PATHが通ってないだけだろ。フルパスで書いてみれば?
>>573 普通に使える。
>php xcp.php
<?php
echo shell_exec("type xcp.php")."\n";
echo shell_exec("xcopy /?");
?>
ファイルとディレクトリ ツリーをコピーします。
[以下略]
path通してないんじゃ?
%PATH%入れてませんですたorz
577 :
nobodyさん :2006/02/02(木) 12:29:48 ID:nicG19IV
質問です。 関数やメソッドに「配列を複数の引数として渡す」のは call_user_func_arrayなどで出来ると思いますが、 new時のコンストラクタには出来ないのでしょうか。 class obj{ function obj($a,$b,$c){ echo "a=$a,b=$b,c=$c<br />\n"; } } $arr=array("a","b","c"); new obj($arr); ↑みたいにしたいのですが・・・。 よろしくお願いします。
>>577 できないと思われ。
俺も以前、割と汎用的なファクトリパターンを実現したくて(飽くまで遊びでだけど)同じこと考えたけど、できないので諦めた記憶がある。
そのときは結局、継承だかインターフェイス使うかしてinitializeっていうメソッドを加えてcall_user_func_arrayした。
作ったやつ実際どこにも使わなかったけどorz
>>577 call_user_func_array(array("obj", "obj"), $arr);
取得したリモートホストのドメインより前を隠したい(*.aaa.co.jpのように)のですが、やりかたがよくわかりません。。 ヒントください。
ただし静的呼び出し(obj::obj()と同義)なのでコンストラクタ呼び出しとしては意味なさげ。 new obj($arr); //newの戻り値無視 とは同等だけどね
特に今困ってるわけじゃないんだけど、 PHP5ってそろそろ移行しといた方が良いと思う?
好きにすればいいと思うが、「良いかどうか」と問われれば「まだ早い」と答えたい
>>577 コンストラクタ側にそういう機能を持たせたら?
class obj{
function obj($a,$b,$c){
if(is_array($a)) {
list($a, $b, $c) = $a;
}
echo "a=$a,b=$b,c=$c<br />\n";
}
}
>>577-578 こんな感じのラッパーはどうか。試してない。
instance_on_array($classname,$args) {
$args_list=join(",",$args);
eval("\$instance=$classname $args_list");
return $instance;
}
586 :
nobodyさん :2006/02/02(木) 13:24:50 ID:nicG19IV
>>580 どういう挙動にしたいかいまいちわからないけど、例えばこんな感じか?
"*" . strstr("bbb.aaa.co.jp", ".")
588 :
nobodyさん :2006/02/02(木) 14:35:36 ID:nicG19IV
結局、力技で・・・。 switch( count($arg) ){ case 0: return new $obj(); case 1: return new $obj($arg[0]); case 2: return new $obj($arg[0],$arg[1]); ...以下ひたすら延々とw 皆さんありがとうです。
589 :
529 :2006/02/02(木) 17:39:14 ID:???
結果報告 -------------------------------------- 環境 apache+mod_ssl-1.3.33+2.8.22_1 (httpsを利用) php4-4.4.2 php.ini memory_limit = 8M test.zip 25Mbytes -------------------------------------- (1)OKコード $filename = "./test.zip"; ob_end_flush(); readfile($filename); -------------------------------------- (2)NGコード $fp = fopen ("test.zip",'rb'); while(!feof($fp)){ echo fread($fp,1024*10); flush(); } fclose($fp); -------------------------------------- (1)の場合でも、session_start();を利用すると× 両NG時、memory_limit = 100MでOK、70MではNGだった。 25Mのファイル如きに、冗談かと思うメモリ消費量。 なんにせよ疲れた…。
590 :
nobodyさん :2006/02/02(木) 18:02:40 ID:v1gMyS91
PHP初心者の漏れなんだがとても困ってるので質問シマス。 実はHPを運営してるんだが、phpの掲示板を設置した しかし、設置したはいいが動作しない(ページが表示されない) 鯖はsakuraです しかし別の鯖ではうまく動作します phpはぜんぜんわからないのでご支援ヨロです。
うpして
>>590 ダウンロードした物をそのまま上げて動かないなら
文字コードかなあ。
>>590 別の鯖で動くなら、その動くほうの鯖で動かすっていう選択肢はなしなの?
594 :
590 :2006/02/02(木) 18:20:47 ID:v1gMyS91
>>592 文字コード?
>>593 別の鯖は無料の代わりに広告が入るから…。
出来ればサクラで動かしたい
同じ鯖で同じスクリプト使ってるサイトもあるのだが、
ちゃんと動作している。
それじゃソースうpしてみ。 あと「動作しない」ってのがどういうふうに動作しないのか具体的に書くよろし。 エラーメッセージが出るのか出ないのか、表示はできるけど書き込みすると変なことになるとか、文字化けがあるとか。 何をどうしたときにどう変なのか。
>>594 経験的に多いのは
FTP時に勝手に文字コードが変わったとか
設定ファイルを書換時に文字コードが変わったとかで
サーバの設定上使えない文字コードになっていたり
一部のファイルのみ文字コードが変わった結果
部分的にエラーになっている状態。
エラーメッセージ無しで真っ白なんだよね?
>>594 まぁ、恐らく「パス指定」とかデータ格納場所の「パーミッション」とかの問題だと思うね。
sakuraのPHPはCGI版だがそのことで何かミスしてるんじゃない?
599 :
590 :2006/02/02(木) 18:53:06 ID:4KM2QfVc
600 :
nobodyさん :2006/02/02(木) 18:59:28 ID:c4LX8dEo
ワロスw
多分パーミッションの設定ミスで 500 Internal Server Error が出てるんだろう。
さくらではCGIはsuExecでCGIを起動して所有者権限で動作する。
フォルダとスクリプトのパーミッションは何になってる?
777とか707じゃ動かない筈、755か705でやってみれ。
フォルダとスクリプトは755(705)、それ以外は644(604)、ブラウザで直接参照しないデータファイルなら600でok
これでならないようなら、レンタル鯖板のさくらインターネット質問スレで聞け
↓さくら使うなら一通り目を通すように
>さくらのレンタルサーバ非公式FAQ
>
ttp://faq.sakura.ne.jp/
602 :
590 :2006/02/02(木) 19:42:51 ID:4KM2QfVc
>>601 ありがとう。でもダメだったぽ
なんどやっても500エラーorz
レンタル鯖板のさくらインターネット質問スレで聞いてみることにするよ
いろいろサンクス
>>602 うーん・・ならないか。
試せる環境ないし、一息ついてから聞いてごらん
非公式FAQより
>一回、鯖上のCGIもローカル上のCGIも全部消してごらん。
>そして、コーヒーなりお茶なりで一服してごらん。
>落ち着いたら、もう一回CGIを落としてきて、
>説明書きに書いてある通りに、何も考えずにやってごらん。
>
>大混乱してるときには何やっても上手くいかないよ。
>落ち着いてマターリと。
一行目のパス指定が無いとか
>>604 書いても無視される。と公式に書いてあった
607 :
nobodyさん :2006/02/03(金) 14:37:08 ID:Rdf8V/FS
・タイトル extension_dirとMySQL ・内容 @c:/windows/php.iniファイルで、extension_dir = "c:/php/ext/" と設定しましたが、phpinfo()で確認したところ、ブラウザには extension_dirはc:\php5となっていました。c:\phpフォルダは作成済み ですが、c:\php5フォルダは作成していません。 php.iniでのextension_dir設定を反映させるにはどうしたら良いでしょうか。 また、この現象の理由も知りたいです。 Aphpinfo()による出力画面でMySQL設定項目が表示されません。 大項目「libxml」の次は「odbc」となっており、「mysql」がありません。 mysql項目がphpinfo()で表示されるにはどうしたら良いでしょう。 php.iniで下記の設定をしています。 extension_dir="c:/php/ext" extension=php_mysql.dll c:/windows/system32フォルダにはc:/php下のdllをコピーしています。 ・環境 OS:WindowsXP SP2 サーバ:Apache2 PHP:ver.5.1.2 MySQL:ver.5.0 ウィルスソフト:Norton Internet Security ・google検索したキーワード phpinfo,php.ini,extension_dir,mysql,httpd.conf アドバイスのほど、宜しくお願い致します。
609 :
607 :2006/02/03(金) 16:11:13 ID:Rdf8V/FS
>>608 C:\WINDOWS と書いてあります。
下記にはphp.iniはありませんでした。
【1】C:\Program Files\Apache Group\Apache2
【2】HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
610 :
607 :2006/02/03(金) 16:40:00 ID:Rdf8V/FS
>>607 の問題が解決しました。
Apache2の設定ファイル httpd.conf に次の行を記述したところMySQLを認識しました。
○PHPIniDir "c:\php\"
それまでは上記の行を
×PHPIniDir "c:/php/"
と書いていました。
611 :
607 :2006/02/03(金) 16:43:11 ID:Rdf8V/FS
>>608 C:\WINDOWS\php.ini となりました。
アドバイスありがとうございます。
613 :
607 :2006/02/03(金) 17:31:54 ID:Rdf8V/FS
>>612 >>610 に書いた設定をコメントアウトしてもOKでした。
#PHPIniDir "c:\php\"
PHPIniDir "c:\php\" を書いてしまっていたのが良くなかったようです。。
>>590 ローカルマシンでテストした?
コード上の問題なら手元のWindowsマシンなどでもチェックできるわけだが
615 :
nobodyさん :2006/02/03(金) 20:00:36 ID:nU0pDG8Y
【タイトル】 コンストラクタ内で、同じクラスに定義された関数の呼び出し 【Google, PHPマニュアル】 Google: オブジェクト指向、コンストラクタ、PHP5、クラス、etc... マニュ: クラスとオブジェクト(PHP 5)あたり 【環境】 XAMPP1.5.1、PHP5.1.1、WindowsXP SP2 【内容】 コンストラクタ内で、同じクラスに定義した関数を呼び出すにはどうしたらいいでしょう。 もしくは、それと同等のことを行う代替案などはないでしょうか? コンストラクタ内に全部の処理を書くと、量が多くて保守が大変そうなのです。 言葉で少し説明しづらいですが、下のような感じでやりたいのです。 本来のソースでは、関数内のコード量が多く、かつ関数がたくさんあるのですが・・・。 class testClass { private $val; public function __construct($arg){ $this->val = func($arg); } function func($arg){ return defaultFunc($arg) } }
>>615 メンバ関数内でのメンバへのアクセスは$thisを介して行う。
マニュアル読んで出直せ
617 :
nobodyさん :2006/02/03(金) 21:05:05 ID:qY0QLJ3A
preg_match_all の ereg版 は無いんですか?
618 :
615 :2006/02/03(金) 21:39:09 ID:???
>>616 undefind function、ってそういうことだったんですね・・・。
コンストラクタが呼び出された時点で、関数が作成されていないのかと思ってました。
ありがとうございます!
619 :
nobodyさん :2006/02/04(土) 03:00:52 ID:HNAkLjne
htmlspecialchars()で変換した文字列を元に戻すにはどうしたらよいでしょうか?
そろそろFAQだな。
chopで半角スペースを取るように、 全角スペースを除去する方法ありますか?
mb_ereg_replace('( )+$', '', $str)とか
623 :
622 :2006/02/04(土) 06:29:45 ID:???
>>622 解答thxです。
確かにその方法ありますよね。
実は数千件のデータ処理に使ってるのですが、
正規表現だと重いので避けたいのです。
なので関数の方が好ましいのですが・・・。
#貧弱開発環境('A`)マンクルポ
>>624 第2引数は1バイト単位のリストだから
それだと最後の文字が化ける可能性あり
--enable-mbstring Enable multibyte string support. --enable-zend-multibyte Compile with zend multibyte support. この二つのオプションの違いを教えてください。
>>626 簡単に言えば
--enable-mbstring マルチバイト関数を有効にする
--enable-zend-multibyte 通常はスクリプトの記述として使えないSJISを使用可にする
629 :
nobodyさん :2006/02/04(土) 16:35:43 ID:+uM4bJSp
質問させてください。 テキストファイルに数行のデータを書き込みます。 その時に キーワード<>データ1<>データ2<>.... というようなフォーマットで書き込んでいきます。 この時に、テキストファイルからキーワードを検索し、 そのキーワードを含む行を取ってくるようにするには どうしたらよいでしょうか。
文字列操作の関数にどんなものがあるか一通り調べてから出直してこようね
>>629 1.1行取り込む。
2.取り込んだ行の最初の<>までのデータをキーワードとして取得する。
(キーワードには<>が含まれていないこと)
3.取得したキーワードと検索キーワードを比較する
4.比較の結果マッチすれば、その行を保持する
5.ファイルの終わりまで1〜4までを繰り返す。
これを
>>630 の言うようにマニュアルの文字列関数等で
使えそうなものがないか確認しつつ実装する。
632 :
nobodyさん :2006/02/04(土) 17:47:40 ID:+uM4bJSp
下らん質問だなぁ
634 :
nobodyさん :2006/02/04(土) 22:10:43 ID:f7yaA8i8
rawurldecode()でたとえばShift_JISでエンコードされた文字を <head> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=Shift_JIS"> </head> <body> <? $str = "%82Q%82%83%82%88%82%c5%82%b7%81B"; echo rawurldecode($str); ?> </body> で表示すると”2chです”としっかり表示されますが <head> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=UTF-8"> </head> <body> <? $str = "%82Q%82%83%82%88%82%c5%82%b7%81B"; echo rawurldecode($str); ?> </body> ではUTF-8なのでしっかりと表示できません。 そこでエンコードされた値を調べUTF-8でエンコードされたのか、またはShift_JIS、EUCなのかなどを判断しUTF-8ならデコードしそのまま表示。そのほかの場合は一度デコードしUTF-8型に戻してやりしっかり表示させるにはどうしたらいいのでしょうか?
>>634 それ、decodeとか関係なく普通に文字コード処理の基本の話だから。
mb_convert系のマニュアルを頭から読み直すとよろしい。
>>629 <>区切りってのがkentのcgiっぽくてダサいなぁ。
つまり、2ちゃんねるはダサい、と。
触れちゃだめです
「,」区切りはデータのエスケープが面倒ってのは分かるけど、 TABでなく「<>」を使うってのはどういう意図?
HTMLタグは実体参照化されているのが前提だからだろ。 「<」だけでも本来なら良いはず。
HTML上では使用しないだけなら「<」でも「>」でもTABでも一緒だろ。 で、世間一般で区切り文字として標準的なのは「,」かTABだろ。 何故そこであえて「<>」を採用するのか?ってことだよ。 1人や2人なら、まぁそういう人もいるよね、好き好きだしね、で済むけど わざわざ他人の真似をしてまで採用するようなもんじゃないと思うんだが。
4月1日専用ページを作りたいなぁと思ったのだけど、その頃生きてるか解らん どうしたらいいですか?
643 :
nobodyさん :2006/02/05(日) 02:09:19 ID:uUJqicme
$footer = "<hr><p align='right'>Posted $posted|$date|<a href='$posted.html'>comment()</a>"; 中略 fputs($fp,$footer); として、投稿日時、コメント用ページへのフッターを貼り付けたいのですが、 「Posted comment()」 となってしまって時間が表示されません 回避方法はありますでしょうか・・・・・
>>643 >回避方法はありますでしょうか・・・・・
プログラマーを雇う
>>643 まあ考えられるのは$postedや$dateに値が入ってないってことくらいだろうけど。
print_rやvar_dumpを$footer = ・・・の直前でやってみたりしてごらん。
未定義か空文字かnullかfalseかその辺だろうから。
原因がわかったら$postedや$dateに値を代入している部分周りのロジックを入念にチェック。
>>641 俺はTabだと確認のとき見づらいから<>使ってる
647 :
nobodyさん :2006/02/05(日) 02:28:36 ID:uUJqicme
>>644-645 $footerを2分割して後でまとめて表示することでできました。
ありがとうございました
648 :
nobodyさん :2006/02/05(日) 02:58:11 ID:uUJqicme
<?php @〜〜〜 ?> <HTML本文> <?php A〜〜〜 ?> のように間にHTMLの本文を挟んで離れた<?php〜?>間で変数の受け渡しって可能なんですか?
頑張れば可能ですよ。 頑張らなくても可能だけど。 ただ、頑張って。 不可能は可能になるから。
>>648 下らん質問スレ行きネタだと思うが、全く問題なく同じ変数を扱える。
逆に言うと、<?php ?>タグ内でのローカル変数ってのは無い。
ローカル変数を使いたい場合は関数などにする必要がある。
651 :
nobodyさん :2006/02/05(日) 04:48:55 ID:uUJqicme
php5 で apcか zend optimizer 使ってる人いる?
0〜10000までの数字の中からランダムな数字を選ぶには、 mt_srand (microtime()*100000); $rand = mt_rand (0,9999); ですよね? これを改造して、ある任意の数字だけを選ばれないようにしたいのですが、どうしたらいいでしょう? たとえば、523と6982と7025だけはランダム結果に含めたくないとします。 このとき、「選ばれたくない数字」が固定かつ少数なら、配列に入れて$randと比較し、含まれてたら whileなどで再度1行目からやり直せばいいのですが、この「選ばれたくない数字」が多数かつ随時増えていく、としたら どう対策したらいいか分かりません。もし全部配列に入れていったら、下手したらカブらない数字が出るまで 何千回もループしちゃうわけで・・・。うまいやり方ないでしょうか? ※ちなみにこの「選ばれたくない数字」は実際にはDBに入れてあります。
あ、「0〜10000まで」じゃなくて「0〜9999まで」でしたorz
>>654 <?php
$array1 = array(10, 15, 6); //選ばれない数字の配列
$array2 = range(0, 9999); //全ての数字の配列
$array3 = array_diff($array2, $array1); //選ばれる数字のみの配列
$rand = $array3[array_rand($array3)];
echo $rand;
?>
よく考えたらキーと値は数字が同じなので $rand = $array3[array_rand($array3)]; は $rand = array_rand($array3); でも同じだった。
>>656 すいません、「神」と呼んでいいでしょうか??
ただ一つ疑問が。。。
手元にある大垣ポケリファ旧版には、「array_rand」という関数が載ってません。
これはバージョン依存の関数ですか??
659 :
nobodyさん :2006/02/06(月) 10:31:12 ID:FPpXqvwh
>>658 array_randはPHP4からなのでPHP3では使えません。
大垣本の帯には「4.3.0対応!」って書いてあるのに、載ってない・・・orz
PHPのリファレンスは本家オンラインのを使うようにした方がいいぞ
紙って便利なの・・・
Printer friendlyを印刷
664 :
nobodyさん :2006/02/06(月) 11:37:05 ID:FPpXqvwh
chmダウンロードして使ってるけど検索やリンクがあって便利だけどね。 引数確認したいときとかエディタ上でダブルクリックしてF2キーでも呼び出せるし(PHP editor)。
>>656 配列に1万個も値を入れたら、動作に支障出るよね??
っていうか、配列の限界ってどれくらいなんだろう・・・。
>>665 個数自体はPHPが変数で使用可能なメモリの限界量まで。php.iniで設定。
数値indexとしてはPHPの扱える整数の限界まで。つまり「全ての数字」の配列と同等。
配列1つに16byte使うとしても占有するメモリは160KBぐらいだろ。1マンコ程度なら
どっちかっつーと実行時間の方が怖いけど、それでも1万個くらいならやばいってほどじゃない。 3万個とかになってくると実行時間が秒単位になってくるので体感的にかなり厳しい感じ。
Javaは32kBまでだっけ。
PHPはデフォルトだと8MBだっけ
phpmyadminで文字コードの部分にutf8だけ出て euc-jpとか出ないのですが、 これは何が問題でしょうか? mysqlのujisサポートでインスコとかも繰り返しましたが、 以前症状は変わりません。
>>671 PHP 関係無い。MySQL スレへ逝け
>>672 本当に関係ないか?phpmyadmin自身の問題じゃないの?
>>668 そうだよね??
となると、
>>654 のやりたいことを解決するには、
>>656 以外の方法も考えねばならんか。。。
たとえばこれが1万個じゃなくて100万個だったら、みんなはどう解決する?
配列じゃ現実的に無理だよね。DB内で何かしなきゃならんかな・・??
>>674 order by random() limit 1
スレ違いスマソ
>>673 確かにphpで書かれてはいるが
個別ソフトの設定はスレ違いでは?
>>674 ていうか、そんな物をPHPで作らないといけなくなる状況が想像出来ない。
逆に言うと、そんな事やらないといけなくなるのは設計ミスじゃないのか?
>>674 どんな処理でも無制限にデータ量を増やそうとすれば破綻する。
逆にどんな量でも通用する仕組みを作ると今度は小さいデータのときに無駄なオーバーヘッドを生む。
あらゆる条件で通用するロジックなんて無いだろ。
自分の目的に合わせてTPOで選べないやつは単なるコーダーであって設計者とは呼べない。
>>675 んんん???
要するに
>>654 は「『選ばれたくない数字』が多数かつ随時増えていく」ってのがキモでしょ、多分。
となると、この、どんどん増えていく「除外すべき数字のリスト」に含まれる数字を、
どうやってランダム関数の結果から排除するか・・・っていうアルゴリズムが難しいな。
0〜1万程度なら
>>656 のやり方でいいだろうが、もし0〜100万の範囲となると・・・
>>678 そうだね。
じゃあ1万個程度の解決策は
>>656 方式でとりあえずOKとして、
じゃあ100万個レベルだったら、
>>679 はどうする??
設計者様ならではの思考を知りたいです。
>>679 whereで除外したい数値を指定すればいいだけじゃないのか
>>680 設計者様(藁といたしましては、範囲を区分するかね。
例えば100万だったら1万×100ブロックとして処理するとか。
>>682 その範囲の区分の仕方が難しいよね。
たとえば、「除外数字リスト」には次にどんな数字が追加されるのか
予想できれば簡単だろうけど、もしそれもランダムに増えるんだとしたら・・・
>>681 違う違う。
PHPスクリプト内でランダムに計算結果をリアルタイムで求めるんだろうから。
DBにあらかじめ何かが入ってるわけじゃなくて。
>>680 全数字を入れたテーブルをnums、除外したい数字を入れたテーブルをextとして
select num, random() as idx from nums where num not in ( select num from ext ) order by idx limit 1;
みたいな感じでいけるんじゃないの。試してないけど。
686 :
682 :2006/02/06(月) 20:32:38 ID:???
>>683 自分が仕様を理解してないのかも知れんが、
最初にどのブロックで処理をするかランダムに決定して
後はその対象となるブロックの範囲で処理するだけだよ。
当然「除外数字リスト」とやらもブロック毎に分ける。
>>684 除外値が動的に実行時に決まる、とは書いていない。
674で、DB使ったらどうなるかなと聞いてるから答えてるんでしょ。
ていうか654に選ばれたくない数字はDBに入ってるって書いてるし。
>>687 仮に動的に実行時に決まるのだとしてもDBのワークテーブルに一時的に格納すれば済む話。
オーバーヘッドの多い処理方法だが件数が極めて多いときにはそういった手法も有効。
1 2 3 4 5 略 とデータがあるのを一個ランダムで消して保存 1 2 3 5 略 となる。次はまた一個ランダムで消す。それを繰り返すだけのことでは?
>>689 そういった単純な繰り返し手法は件数が少ないときじゃないと厳しいでしょ
691 :
nobodyさん :2006/02/06(月) 23:33:22 ID:+hyQlmQi
funciton について教えて欲しいのですが、 例えば、Aというファイルにfunctionを100個定義します。 そしてBのファイルにAファイルをincludeします。 でも、BのファイルではAのファイルのfunctionのうち、1つしか呼び出しませんでした。 このとき、@BファイルはAファイルのファンクションを全て読み込むのでしょうか? ABファイルはAファイルで使用したファンクションのみを読み込むのでしょうか? (@でしたら便利だと思うのですがAの状態だと重くなってしまいますよね。) 宜しくお願いします。
はい、全て読み込みます。
693 :
nobodyさん :2006/02/07(火) 00:10:46 ID:9eIIutOU
レスありがとうございます。 どれ位の数のファンクション読み込んでもストレスを与えない程度に大丈夫なんでしょうかね。
>>693 APCとかのコードキャッシュを行うアクセラレータを組み込んでればさほど問題ないけど
何も入れてないノーマルの環境だと体感できるほど遅くなってくる場合がある。
程度は関数の数よりコードの分量と複雑さによってくると思う。
200〜300行/20KB程度のclass定義ファイルを10個くらい読み込ませると
サーバー環境にもよるだろうけど0.3秒ほどの遅延が確認できた。
「ストレスを与えない程度」は状況や規模によりけりなので自分で判断しる。
695 :
nobodyさん :2006/02/07(火) 00:24:53 ID:9eIIutOU
>>694 ご親切にありがとうございます。具体的な数字を教えて頂いて助かりました。
300行を2つくらい読み込ませようと思ってたところなんで、ガンガンFUNCを作って
プログラムやってきたいと思います^^
696 :
nobodyさん :2006/02/07(火) 00:25:10 ID:VahS1T1X
200〜300行を たった10ファイルで 0.3秒も遅くなるの!!! えぇぇぇぇ
699 :
nobodyさん :2006/02/07(火) 01:38:21 ID:vK7c16Ac
関西弁変換プログラムをつくろうと摸索中です。 <? function kansai($text){ $text=str_replace("ありがとうございました","おおきに",$text); } ?> 上記の内容のosaka.incというファイルを作成し 外部ファイルからosaka.incをrequire_once print(kansai($text)) とやると 中に入っていたはずの文字列が全て消えてしまいます。 どこがおかしいのでしょうか?使う関数が間違っているのでしょうか?
>>698 PHPは同種のスクリプト言語の中じゃ特に遅い部類なんだから
速度を気にする香具師はアクセラレータ入れて動かしな
>>699 くだらん質問をくだ質スレから持ってくんな
>>700 同種のスクリプトが何を指すかわからないけど、
そこそこ早いと思うぞ。
少なくともrubyよりは早い気がする(検証はしてない)
return $text
705 :
654 :2006/02/07(火) 03:42:33 ID:???
>>654 です。
皆さんありがとうございます。とても参考になります。
>>687 さん、私の言葉が足りませんでしたが、除外数字は動的に決まります。
具体的に言うと、ランダム関数で出た数字を一つ一つ「除外リスト」に追加していき、それをDBに保存します。
つまり、0〜10000までの範囲でそのスクリプトを1万回実行すると、最終的には除外リストに1万個の数字が入り、
もう選べる数字がなくなる・・・という風にしたいのです、
(逆に言えば、1万回のランダム計算で、常に一意の数字を選び出したい、ということなんです)
706 :
654 :2006/02/07(火) 03:48:13 ID:???
補足レスです。 「常に一意の数字を」ではちょっと言葉が足りないかもしれません。 「常に一意かつ未だ一度も選ばれてない数字を」です。
それって uniqid('',true) じゃ問題になるぐらいのユニーク性を確保しないといかんのか? 用途が分からんから「こうしろ!」って一つに絞るのは不可能だし、それを使って何がしたいのかもワケワカメ。 まさか糞重い処理をアクセス毎にやるとは言わんだろうけど、最初に作ってDBにでも放り込んでおけば?
708 :
654 :2006/02/07(火) 04:02:26 ID:???
>>707 はい、自分の意図した数字(あるいは文字)の範囲内でランダムな値を得たいので、
uniqidでは無理なんです・・・。
用途はいろいろ応用できるかと思いますが、たとえば「宝くじ番号」みたいなのを
ランダムな順番で発行したりとかにも使えますよね。
709 :
654 :2006/02/07(火) 04:09:45 ID:???
ちなみに私が最初考えた方法は、ランダム計算を実行するたびに出た数字を
DB内の「除外リスト(最初は空)」に問い合わせて、該当するものが含まれてなければ
それをリストに追加保存し、該当するものが既にあったら、再度ランダム計算をやり直す…というものでした。
この方式だと、リスト内の数字の数が少ないうちはいいのですが、
だんだん増えてくると数字がカブってランダム計算を何度もやり直してしまう確率が
どんどん上がってしまいまして・・・。
これを解決するのに、数字の範囲が〜10000程度なら
>>656 さん方式でいいのですが、
100万などとなるとやはり区分けが必要で、その区分けの仕方がうまいこと考えつかなくて・・・
アホほどメモリ食うけど100万ぐらいならこれでいけるべ。 リクエストごとにリストを作り直すような使い方には極めて不向きだけど、 結果をDBなりファイルなりに保存しとくなら許容できるっしょ。 <?php $a = range(0, 999999); var_dump(number_format(memory_get_usage())); shuffle($a); $b = array_slice($a, 0, 100); unset($a); var_dump(number_format(memory_get_usage())); $c = array_map(create_function('$n', 'return sprintf("%06d", $n);'), $b); print_r($c); ?> string(10) "60,238,624" string(6) "64,848" Array ( [0] => 354393 [1] => 080271 (中略) [98] => 030508 [99] => 717038 )
>>708 宝くじ番号をランダムに発行する必要性がないからな・・やっぱり何を作ってるのか分からない・・・。
上位桁(0〜1000)と下位桁(0〜999)に分けて、
・上位桁の既出リストをDBから取得
・それを元にランダムに一つ選ぶ
・結果から下位桁の既出リストを取得
・それを元に(ry
上位桁*1000+下位桁=ランダムな値
(もしやるなら上・中・下位桁の3段ぐらい欲しいな。)
もうちょいきれいに書いてみた $min = 0; $max = 999999; $num = 100; $fmt = sprintf("%%0%ds\n", strlen(strval($max))); // パディングは好みで $list = array_rand(range($min, $max), $num); shuffle($list); foreach ($list as $n) { printf($fmt, $n); }
そういう案件なら、まず事前に00000〜10000までの数字の配列を作ってそれをランダムに並べ替えてDBに登録しておき、 リクエストごとに頭から順に返していって「ここまで使用済み」というカウントだけ保持しときゃいいと思う。 これが1番お手軽かつ高速。
714 :
713 :2006/02/07(火) 13:00:06 ID:???
もう1つの案としては同じく00000〜10000までの配列をどんな順番でもいいのでDBに登録しておき、 リクエストごとに1個削除してそれを返していく方式とか。これならカウンタの保持も要らない。 なんにせよ、そんな案件をリアルタイムにデータ生成してるのはただのバカかと。
このネタまだ続いてたのか
>>713 たしかにそれはいいね。
でも数字だけならそれでいけるけど、これがさらに「a5fw8g」みたいに、
任意の英数字で構成される文字列が対象だと、その手法も使えないよな。
こういう予測が不可能(または無限に近い)な文字列だったら、どうする?
やっぱリアルタイム生成でうまい方法を考えるしかないっしょ・・・
>>716 それならsubstr+md5+uniqidする
かぶる可能性はかなり低くなるのでDBへの問い合わせもそんなにループしないと思う
>>717 ん? それでも「使用候補リスト」をあらかじめ作っておく方式にするの!?
いったい何百万個用意しておく気だい・・・??
しかしこのスレ、みんなのいろんなアルゴリズムが見れて楽しいなw
教えてください。 バイナリファイルを読み込んで内容を16進で出力したいんですが、 どのように出力すればいいのでしょうか? fget()で読み込んでそのままprintしただけでは 当然文字として出力されてしまいます..。 そもそも読み込み方が違うのでしょうか? 宜しくお願いします。
>>719 echo bin2hex(fgetc($fp))
桁もそろえたいなら
printf("%02X", ord(fgetc($fp)))
あたりでドゾ
>>716 自分で何を言っているのか判ってないんだろうから解説するとね。
●数学的に完全にランダム。(過去の記憶を持たない:重要)
●過去に出た文字列は出さない(過去の記憶が必要:重要)
つまりね、命題として、”リアルタイム生成”ってのは既に不可能なんだな。
なんらかの形で過去を記憶しなきゃならん。
でだ実際に君が欲しがっているものは、実は真にランダムな文字列の列じゃなくてね
n文字の組み合わせからm個とる順列のうちの一つだがね。
結論としてね、n文字の組み合わせを生成するのと、m個の順列を生成する際の
オーダーによってアルゴリズム変えなきゃならないわけ。
下らない質問か、アルゴリズムスレ(そんなの有るのか?)向けの話だと思うけどね。
>>716 それ、可能なパターンをあらかじめ全種類作る必要無いでしょ。
その文字列リストを何の目的で使うのかによるんだけど、
宝くじとかで最終的なユーザ数(リクエスト数)が想定できるなら、
使う可能性のある分だけランダムに生成した文字列をあらかじめ入れとけばいいだけでしょ。
また、これを何十年も運用し続けるというのであれば、初回に100万種類用意しといて動かし、
そのプールが尽きたら、過去の100万と被らない次の100万種類を新しいテーブルに生成。
その繰り返しで文字列生成の限界まで運用すればいいと思う。
これでもデータ生成は継続時にバックグラウンドで1回だけ行うだけだから、
それ以外の通常運用時の負荷は非常に低い。
何の問題も無いと思うが?
>>718 最終的には「使用候補リスト」→「使用済みリスト」に
置き換わって行くわけだから別に最初からリストアップしてても問題はないんじゃない?
だって運用していけば、その何百万個が入った「使用済みリスト」が出来ることは
仕様に盛り込まれてるんでしょ。
漏れも考えたのは
>>713 の方法だな。
使っていない数字数百万をどっかに保存するのと
使った数字数百万をどっかに保存するのとなら、
最大に使う容量は最終的には変わらん。
宝くじは適当な番号を生成してるんじゃなくて、
連番で作ったくじをバラバラに配っただけ。
そもそも8桁(一億程度)の数字の中で数万しか使わないのなら
適当に数字を選んで、使っていたら選びなおすというアルゴリズムでも
発生に要する時間を気にする必要も無いかと。この場合、
すでに使った数字にぶち当たる確率は最も高くて1000分の1だから、
数値を3回選ぶ必要がある事すら数回あるか無いか、な訳で・・・。
0000〜9999の数値が全くかぶらずに適当に1万種(つまり全部)出てくるのなら前者、
00000000〜99999999の数値が全くかぶらずに適当に10万種出てくるのなら後者
>>721 >命題として、”リアルタイム生成”ってのは既に不可能
言っている意味が分からないなぁ。
既出の数字を避けつつリアルタイム生成・・・って可能でしょ。
>>724 「使用候補リスト」と「使用済みリスト」はお互いにカブらないものだから、
どちらか一つあれば十分だよね。
当初は「使用済みリスト」しか考えつかなかったから、それが仕様になってたんじゃない?
>>725 宝くじってのはあくまでも一例でしょう。
俺もこの系統でいろいろ用途は思いつくぞ。
>>726 わからない?
これ”ランダム”な文字列の生成だと思ってるみたいだけど、実際には”シャッフル”の問題だと言う事。
リアルタイム生成(いまいち実体は掴めないが)に必要な条件は”過去を無視”できると言う事。
だから”ほぼ”過去を無視できるなら(つまりm個)が小さいなら、擬似的に”リアルタイム生成”
も可能だが、そうではないなら厳しいと言う話。
どこで区切るかは、それこそオーダーの話になってくるよ。
という事なんだけど、判ってもらえるかな?
>>726 >>721 は「リアルタイム生成」=「一切の元情報なしでその場で算出」と勘違いしてるだけかと。
>>725 の話は一例だとして、事前に必要数をプール→足りなくなったら補充方式でダメなケースって何?
いずれにせよ、アルゴリズムは用途に応じて最適なものを選択するものなんだから、宝くじって言われたら
それに適した解を出すべきであって、そこに無理に抽象化されたアルゴリズムを持ち出すのは無意味かと。
この方法では問題のあるケースに適したアルゴリズムを出せというなら、まずその用途を出しましょう。
>>728 >「リアルタイム生成」=「一切の元情報なしでその場で算出」と勘違いしてるだけ
違うけど…
Cか何かで既出(or未出)を保持するの作って、そいつと通信するのが一番じゃないか?
まぁ、やっぱり何に使うのか分からんわけで
>>726 それって絶対この重い処理が必要なのか、無理に使うなら山ほど浮かぶけど絶対に必要ってのは余程条件に縛りを入れないと・・
>>730 > Cか何かで既出(or未出)を保持するの作って、そいつと通信
それで1番手っ取り早くて確実なのがRDBなんじゃないの?
既出分はどんどん追加登録されていくわけで、それに対するロックとかも考えると中身はまるっきりDBだし。
俺も
>>721 はなんか「リアルタイム生成」を勘違いしてる気がする。。。
>>728 まあとりあえず想定できるケースとしては、数字の範囲が0から1万までの場合(少ない)と、
0から100万までの場合(多い)と、英字も混じるケース(多い上にランダム性が増す)の
3パターンに分けて考えるといいのでは。。。
>>727 細かいなぁ。
じゃあ、「ランダムにシャッフルする方法」って言えば納得する??
昨日から全角スペースでageてるのは
>>654 さんでござるね。
今日は半角スペースでござるか。
>>732 それと、その全部のデータを必要とするのか、一部しか使われないのかでも最適解は異なる。
おまえら釣られ過ぎ、
>>654 が来るまで待つか下質でやれ
>>732 基本的に抽出元リストと除外リストがオンメモリで扱える分量かどうかの2パターンしか無い。
全部数字なのか文字を含むのかはまったくどうでもいい話。
>>726 宝くじの例をわざわざ引っ張り出してきたのは、使い道の一例というより
アルゴリズムの思案方法が間違っている(逆)ことを指摘したかっただけ。
「すでにある数字を避けつつ選んだ適当な数値」を「宝くじに使う」と
言い出したので、その説明を出したまでのこと。
ちなみにー、宝くじ、やりようによっては 警視庁生活安全課から電話がかかるよ。。
>>736 どっちかというとくだ質は、一問一答で
軽やかに流れる質問のやりとりが身上だから。
くだらないというよりも、なさけない質問も多いが。
dnsのsoaを引いて表示したいのですが、どのような方法があるでしょうか?
>>724 digの結果を取り込むか、PEARのNet_DNSクラスと使うとか
自前で全部やるとか、色々。
>>740 だからあくまでも「例」だっつーの。
つまんないマジレスすんな。
マジレスじゃないだろそれwww
んじゃ何レス?
とある書籍で $hoge =& new xxxx(); としてあるのですが この 「=&」 はどんな意味があるのでしょうか? 単に「=」とするのとは違うのでしょうか?
defineって クラス内では宣言できないですか?
>>751 宣言できるが、まずやらない方が身の為だ。
定数はクラスの外で定義したやつでもクラス内で読めるよ。 クラス内で定義したいのならやってみたら?
メンバ変数の初期値で var a = DEFINE . "文字列"; とかできないの不便だよね。 コンストラクタでいちいちメンバ変数の初期化するの面倒&継承時に忘れそうで怖い。
function head(&$dat) の&ってなんですか?無くても大丈夫?
引数は渡された変数の参照(別名)である。 function a( & $foo ){ $foo = "A"; } function b( $foo ){ $foo = "B"; } $goo = null; a( $goo ); print $goo; // A b( $goo ); print $goo; // A のまま
なるほどわかりますたありがとうございまっす
HTML_QuickFormのaddRuleでhiddenの値(one-time token)をvalidateしたいのですが、なぜか全くできません。 仕様ですか?
>>759 defineはメソッドの中でやれば文法上できなくはないってことじゃね?
やめてほしいけどそんなこと。
761 :
nobodyさん :2006/02/09(木) 11:07:43 ID:MpGK/5Xn
SHIFT-JISで test.php ------------ <form method="post" action="test.php"> <input type="submit" value="チャーシュー" name="ラーメン"> </form> <pre> <? print_r($_POST); ?> </pre> ------------- のボタンを押すとラーメンがラ\メンになってしまいますがこれは文字コードを変えるほかは無いのですか?
>>761 name="A[ラーメン"か name="ラ-メン"で我慢する
764 :
nobodyさん :2006/02/09(木) 11:43:20 ID:MpGK/5Xn
(´;ω;`)ラーメン売るの諦めて蕎麦に変えまつ
765 :
nobodyさん :2006/02/09(木) 12:35:49 ID:sFweg2zo
ブログスクリプトを書いてるのですが、 コメントの投稿数をcomment(●) の●の部分に挿入したいなぁという構想があります。 投稿されるとHtmlを吐き出すような形で作っているんですが、 どのようなアルゴリズムというか方法で実現できますでしょうか?
2006/2/3 は 2006年2月の第1週です という変換をしたいんだけど、うまい方法ある? 地道に計算するしかない?
地道な計算といわれそうだが・・・週番号使って求めるのはNG? 2月1日の週番号と2月3日の週番号比べればすぐ出るよ。
>>767 その月の1日の週番 − 指定日の週番 +1 か!
あんた賢いな! ありがとう!
>>765 echo "comment($num)"
ってこと?
何に悩んでるのかよくわからん質問だな
コメントの保存方法にもよるとおもうけど、
コメント数を数えて
>>769 じゃないかな。
771 :
765 :2006/02/09(木) 14:43:10 ID:sFweg2zo
phpファイルを ・ blog投稿+記事Html+コメント用Html吐き出し用php ・ コメントHtmlを読み込んでコメントを書き加えていくPhp と複数に分けてるのですが、この間で値や変数を代入したり 共有したりするのってどうしたらよいのかと悩んでいます
>>771 記事とかコメントはDB(or ファイル)に保存ってとこまではOK?
それ以前の問題?
773 :
nobodyさん :2006/02/09(木) 15:42:22 ID:WmFPFh7w
Javaの instanceof演算子みたいな機能ってある? 生成されたObjectが、特定のinterfaceの実装か確認したいんだけど。 reflectionでメソッドを逐一確認するしかない?
PHPにもそのままinstanceofがあるけど
775 :
773 :2006/02/09(木) 15:56:46 ID:???
776 :
765 :2006/02/09(木) 15:57:23 ID:sFweg2zo
>>776 だったら、そのHTMLファイルの数を数えれば?
778 :
765 :2006/02/09(木) 16:05:29 ID:sFweg2zo
やっぱりコメント分だけHTML作らなきゃ今の実力じゃ実現できませんかね・・・・ HTMLのソースの中からある文字を探し出して その数を数えてHTMLに組みこみ・・・・ javascriptとの連携になっちゃいそうですね
>>778 JavaScript?使わないだろそんなの。
基礎も分からんやつがblog作ろうなんて思わない方がいい。
780 :
765 :2006/02/09(木) 16:17:36 ID:sFweg2zo
innerHTMLを使って日記記事のhtmlにコメントの数を送ろうかなんて考えてました コメント数カウントできれば完成だと思ってきましたが、仕組みの意思疎通って難しいですね どうもありがとうございました
>>778 当面はblognでもハックすれば良いと思われ。
>>778 たとえば、ファイルの中で1コメントが必ず<tr>〜</tr>で囲まれているとしたら、
str_word_count()とかでコメント数は一発で取得できるけどね。
そんなデザインとロジックが一心同体みたいなシステムは最低だけどな
784 :
765 :2006/02/09(木) 16:23:35 ID:sFweg2zo
>>782 ありがとうございます
その関数使ってみます
>>783 うおぉぉぉ 耳が痛てぇぇぇぇぇーーーー!!
>>765 ん?DBだったらselectした時点で件数出せるじゃん。
>>786 RDBMじゃ無いってんでしょが。
HTMLDBなんだってば(w
HTMLDB?ってやつのこと言ってたの? なんかよー知らんけど、件数を数えるのにも一手間かけさせるほど貧弱なシステムを導入する利点がわからん。
確かに投稿読むと
データ=HTML
なんだよなぁ。
普通は、データとHTMLは別にするもんだよ。
>>765
出力結果だけを元にデータをやり取りしようって言うんだからそりゃ無理がある
>>788 「システムを導入する」のではなくて、
「ロジック(自前)を採用して開発してる」が正解かと
まぁ、DBシステムが使えない連鯖だとか、
SQLに明るくないとか、理由は色々あるだろうけど、
せめて、CSVファイルでも良いから、データはデータとして管理して、
出力時に参照・加工・表示、っていう普通の流れにすべきだとは思ふ。
>>789 最終出力をHTMLへの書き込みで終了させ鯖への負担を軽くするのはありだが
それでもファイル破損の恐れがあるときを見積もってDBへデータバックアップとっておくのが普通かな
まぁDBにデータ保存してないなら管理もシステム構築も相当なだるい作業になるとおもうw
今からでもデータをHTMLに分離したほうが、 後々絶対役に立つと思うけどな。
間違った(少なくとも遠回りな)道を歩んでるな
俺も同じような仕組みの物を作ったことがある 対象のHTMLをデータ構造っぽく整形したり正規表現使ったりしたんだが、しんどいだけで実用性はないと思った ある意味練習にはなったけど
せめてHTMLコメントの中にCSV形式で生データ入れとくとかにして欲しいよなw
いやぁ、せめてXMLでしょう・・・v
799 :
nobodyさん :2006/02/10(金) 13:18:23 ID:oBW9CvsC
phpBBという掲示板サイトからダウンロードして掲示板を作ろうとしたんですがやり方がわかりません。 本当に失礼ですが、設置のやり方を一から教えて下さい、お願いします。 ちなみにサイトでやり方を見たんですがやり方がわかりませんでした。
>>799 一からってどこから言えばいいの?
解凍の仕方から?レンサバの借り方?Apache/PHP/DBのインストールの仕方?
ここまでできたら後は普通にアクセスしてフォーム埋めるだけだけど。
>>799 全く分からないなら諦めなよ。
もっと簡単なのから設置してみたらどう?
>>799 公式?サイトでやり方見てわからなかった人が、
こんなところ(失敬!)でのアドバイスで出来るようになるとは思えないが…
とりあえず、phpBBとやらのあり場所とか、その説明とやらが載っている場所とか、
それを見てどこが判らなかったのか?どこでつまずいているのか?
そういった情報をきちんと書いた方が良いかと。
803 :
nobodyさん :2006/02/10(金) 13:30:59 ID:oBW9CvsC
>>800 まずダウンロードして解凍までやりました。でも、これから先のやり方がわかりません。。
宜しくお願いします
>>801 いや諦めたくないです。この掲示板を使いたいので。
804 :
nobodyさん :2006/02/10(金) 13:32:15 ID:oBW9CvsC
>>802 わかりました。家帰るのが夜になるんで夜また連絡しますね。
宜しくお願いします。
806 :
nobodyさん :2006/02/10(金) 13:47:01 ID:oBW9CvsC
>>805 まぢありがとうございます!!
設定したらまた夜に来ますね。phpマスターな皆さん的には設定簡単ですよね?
808 :
nobodyさん :2006/02/10(金) 14:25:13 ID:i50XZrAk
XML形式で書かれた文字列(?)オブジェクト(?)を
Javascriptの.responseXMLプロパティで取得させるには
どうすればいいんでしょう??
ちなみに、
-----------------------PHP側(XMLを出力)
<?php
$callpath = '
http://www.exsample.com/rest.php '; //←外部RESTサービスからXMLを取得
$xml = simplexml_load_file($callpath);
print $xml;
?>
-----------------------javascript側(XMLを受信)
function callback(o){
var res = o.responseXML;
alert(res.firstChild);
}
なんて感じでやってみましたが
失敗しました。
>>808 使ったことないので知らないけど、マニュアル見た限りではsimplexml_load_fileはSimpleXMLElementオブジェクトを返すらしいから、そのままprintするのはまずいんじゃないの?
simplexml_load_fileとか呼び出さずにそのまま出力すればよさそうな気がする。
あと、JavaScriptの方でres.firstChildはオブジェクトっぽいからそのままalertにぶちこんでも[object]とか表示されそう。
ググりまくったけど全然情報が無いから質問させて下さい GD関数を用いて画像を表示するプログラムを作っているのですが、jpg,png,gifは問題なく行けていて、 bmpファイルがどうしても作成できません。 例えばjpgなら、 header("Content-Type: image/jpeg"); $image = imagecreatefromjpeg("files/a.jpg"); imagejpeg($image); とすれば出力できますが、bmpには対応する関数がありません。 どなたかbmpをブラウザに出力できる方法をご存知の方ご伝授下さい。 あとアニメーションgifに関しても教えていただければ凄く助かります(静止gifで詰まってます;
811 :
nobodyさん :2006/02/10(金) 14:46:42 ID:txESpKQg
parse_url()で取得したホスト名( www.2ch.net など)のみを表示させるにはどうしたらいいのでしょうか?
$a[0]->b = "aaa"; $a[0]->c = 11; $a[1]->b = "bbb"; $a[1]->c = 33; 今このようにして書いてるのですが これをarray関数などを使って 簡単に書くことはできないでしょうか?
>>810 BMP用の関数はないよ。
でも以前ここの過去スレかなんかで誰かが書き込んでたのを見て知ったんだけど、
http://www.php.net/imagecreate のUser Contributed Notesの中でImageCreateFromBMPを自作した人(今のところは上から2番目にある)がいるから使ってみては?
何気にちゃんと動作するよ。
出力のほう(imagebmp)は見かけたことないけど、どうしてもやりたいなら頑張って自作するか、ImageMagickを使うとかになると思う。
(話はそれるけど、PECLのimagickをcygwinでインストールしようとしたけどphpizeが成功したことがないので、誰かphp_imagick.dll持ってる人いたらうpしてもらえませんか?)
>>811 print_r($parse_url($url))してみれば道は開けるはず。
814 :
nobodyさん :2006/02/10(金) 15:08:50 ID:Gf4j4Lcn
>>812 「簡単に」の定義と、値('aaa'や'11')とキーの相関関係を述べよ
>>810 アニメーションgifはImageMagick使うしかないくさい。
>>812 どうしたいのかがイマイチわかりません。
データの出所がわかればarray_walkかarray_map適当に使えばできそうだけど、そのコードじゃワケワカメ。
817 :
810 :2006/02/10(金) 15:32:09 ID:???
>>813 レスありがd。 やはりありませんでしたか;:
少々方向性を変えてみようと試行錯誤しているのですが、ファイルを直に出力することは可能でしょうか
header("Content-Type: image/gif");
と一旦gifであることを定義して、gifファイルを出力しようと考えてます
例えばタグで言うところの<img src="a.gif">的な感じです。
そう打てれば話は早いのですが、画像ファイルの位置を分かられない様にして画像を出力させようとしています。
なのでタグだとそのタグの画像URLを直打ちされるとアウトなので;
JPGなら
header("Content-Type: image/jpeg");
$image = imagecreatefromjpeg("files/a.jpg");
imagejpeg($image);
imagedestroy($image);
とやってしまえば、メモリ上に一時的に画像が生成されるだけなので元ソースがぼかせるのですが、他の形式だと一筋縄では行かず詰まってます。
>>817 ファイルを出力するだけなら
header("Content-Type: " . image_type_to_mime_type(exif_imagetype($filename)));
readFile($filename);
って感じでできるよ。
このコードは画像限定だけど、画像ならだいたい一通りどの形式でもおk。
画像じゃなくてもcontent-typeさえ求めればいけるし。
819 :
nobodyさん :2006/02/10(金) 15:51:28 ID:O8bbZDPI
$pw = $_POST["pw"]; // (1) POSTデータを$pwに代入 if ( $pw == "hoge1" ) { } elseif ( $pw > "hoge2" ) { } 入力データチェックなどで、上のように変数代入して比較の場合が多いと思いますが、 自分はなるべく変数(変数名?)の使用を減らしたい派で、(1)の処理をなくして置換してました。 (ソース的にも見やすく理解しやすかったので) でもJavascript(DOM)の資料などを読んでいて 「エレメントの直接参照が遅いので変数に入れる」みたいなのがあったんですが、 環境変数の参照回数を減らすと速度的に良いとかありますでしょうか?
>>817 何の加工もしないのならメモリの無駄遣いじゃないか
821 :
819 :2006/02/10(金) 15:56:00 ID:O8bbZDPI
>環境変数の参照回数〜 グローバル変数・セッション変数や環境変数 に置き換えてください。すんまそん
>>819 その程度の処理ならどっちでやっても良いんじゃないの?
それよりも、そのサンプルの方が、コワイ(あくまでもサンプルでしょうけど)。
pwってパスワードだよね?
パスワードを平文で管理とか、文字列を大小比較していたり…
823 :
812 :2006/02/10(金) 16:03:40 ID:???
>>815-816 ごめんなさい。値に意味はありませんでした。
質問しなおします。
$b[0]["aa"] = "aaa";
$b[0]["bb"] = "222";
$b[1]["aa"] = "bbb";
$b[1]["bb"] = "555";
と
$a = array(
array("aa"=>"aaa","bb"=>"222"),
array("aa"=>"bbb","bb"=>"555")
);
は、同義だと思いますが
$b[0]->aa = "aaa";
$b[0]->bb = "222";
$b[1]->aa = "bbb";
$b[1]->bb = "555";
これを、arrayを使ったときのような感じで書けたら
スマートかなと思って模索しているところです。
なにか方法はないでしょうか?
>>819 憎まれ口になるが、変数名は減らしたいとか増やしたいとかではなく、変数にする(名前をつける)意味があるかどうかで決めるべきで、パフォーマンスは気にするべきではないと思う(ボトルネックになっている場合を除いて)。
それでもどうしても気になるなら一応答えておくと、$_POST["pw"]を参照するよりは$pwを参照するほうが速度的には速いわな。
($_POSTかどうかが関係あるわけではなく、配列のキーである"pw"から要素にアクセスするのに時間がかかる)
JavaScriptのエレメントの直接参照(?)ってのはよーわからん。
ソースキボンヌ。
>>823 おそらくPHPにはあなたの求める構文はありません。
825 :
810 :2006/02/10(金) 16:46:03 ID:???
レス有難う御座いました。 無事表示できました。変に周りくどくせずにこうする方法があったとは・・・お騒がせしました; exif_imagetype関数はphpインスコするとき付け忘れてましたので丁度よい機会なので今からphp-5.1.2にアップする際に入れる予定です。(今は5.0.5
826 :
819 :2006/02/10(金) 17:10:13 ID:O8bbZDPI
ああー!なるほど理解できました。
連想配列への参照速度が普通の変数より遅いだけなんですね。
これなら余程のループなどない限り気にするほどの差じゃないですね。
Cのポインタを理解して使うようになり、インタプリタでも過去の自作のを
パフォーマンスを良くするソース改善を考えてたので
>>824 さん蟻が豚でした
まあ、変数に代入したほうが見やすい場合が多いと思う
>>824 819じゃないけど、JavsScriptのはwindow.document.GetElementBiId("form").value という
「.」で繋いだ構文のことだと思うよ。
こういうのは何度も使うなら最初に1回変数に入れてからアクセスしろ、って話。
JavaScriptのオブジェクト参照はPHPの連想配列なんて比じゃないほど遅いからね。
ループでこんなの参照してたら楽に2〜3倍くらいの勢いで遅くなる。
>>826 やたら深い多次元配列とか多重リファレンスとかになるとこれはすげー遅いので、
そういうのはさすがに一時変数に格納したほうが速くてなおかつ見やすくなるかもね。
830 :
nobodyさん :2006/02/10(金) 19:20:27 ID:8/RW2vAn
PHPで変数の内容を破棄したい場合はunsetするだけで良いのでしょうか? 共有サーバー上で一時的にパスワードを入れた変数を上書きして明示的に破棄したいのですが何か方法はありませんか?
>>832 共有サーバーであることに何の問題があるのかが分からん。
ひょっとして変数ってのはCookieとかSessionとか、あるいはDBのデータのことを言ってるのか?
スレ違いかもしれませんが。 ローマ字 <=> ひらがな の相互変換ができる関数とか クラスって何処かにありませんでしょうか? ご存知の方がいましたらお教えください。
>>833 変数はPHPの変数です($passwdとか)
その共有サーバーはCコンパイラも解放されていてメモリを直接扱えるので
可能なら上書きして消したいのですが。
>>835 意味ない。
unset()か、別に$passwd='';で全然問題ない。
それ以前に、恐らく消す必要すらない。
みなさんがよく使うログイン・ログアウト処理の流れが知りたいです。 一応動くことは動くのですが、自己流なので心配で・・ ちなみに私が組むと function readuser($username,$password){ if(file_exists("$log_folder$username.dat")){ $user_dat=file("$log_folder$username.dat"); if(rtrim($user_dat[0])==md5($password)){ //いろいろ処理して変換 return $user_dat; }else return false; }else return false; こんな感じになりました。DBは分からないのでファイル管理です; よろしければ汎用のメソッドなど教えて頂けませんでしょうか?
さっき確認したらこれデータ筒抜けでしたorz なんかに使う前で良かった。。
>>834 function HOGE($str) {
ereg_replace("a", "ア", $str);
}
こんな感じで作れ。
841 :
840 :2006/02/10(金) 21:39:12 ID:???
ひらがなかよorz
>>835 そこまで気にするんだったら素直に自前で立てるべきだな
ローマ字ひらがな変換ならマルチバイト関数で出来たと思う
PEARのAuthを。
Unknow Hard Error
おはようございます。 青 赤 黄色 緑 黒 という五種類の色があった場合、全ての組み合わせを打ち出す事は出来ないでしょうか? つまり、この場合ですと、5*4*3*2*1の120通り全ての組み合わせを書き出したいのです。 ループを使おうと思いずっと考えてるのですが、どうしてもいい案が浮かびません。 宜しければ教えて頂ければ幸いです。
>>848 まず、思い浮かんだ悪い案を提示してください。
>>848 とりあえず標準的なアルゴリズムでやってみた。
function next_perm(& $list) {
$n = count($list);
if ($n < 2) return false;
for ($i = $n - 2; ! ($list[$i] < $list[$i + 1]); $i --)
if ($i <= 0) return false;
for ($j = $n - 1; ! ($list[$i] < $list[$j]); $j --);
swap($list[$i], $list[$j]);
for ($i ++, $k = $n - 1; $i < $k; $i ++, $k --) swap($list[$i], $list[$k]);
return true;
}
function swap(& $a, & $b) { $c = $a; $a = $b; $b = $c; }
$colors = array("青", "赤", "黄色", "緑", "黒");
$list = range(0, count($colors) - 1);
while (next_perm($list)) {
$arranged = array();
foreach ($list as $index) $arranged[] = $colors[$index];
echo implode(", ", $arranged), "\n";
}
>>850 すぐに何か書いちゃダメだよ。
まず本人に考えるクセをつけさせないと。
すんません!おっしゃるとおりです! (´-`).。oO(あほか・・・)
853 :
850 :2006/02/11(土) 10:04:43 ID:???
よく見たら最初の一個表示するの忘れてた。 付け加えといて。
>>852 は、
(´-`).。oO(あほだ・・・)
次の方どうぞー
>>850 ありがとうございます。
一応、自分の考えた案は、5つの数字からランダムで5つ順番に取り出し、
(一つ目を取ったら二つ目は一つ目と被らないように・・・と五つ取るのですが)
それで、一つ書き出します。同じように、まだ5つ取り出して取り出したのが既存のとかぶっていたらまたはじめから・・・
と、5*4*3*2*1個書き出されるまでループさせる案ですが、
ずらーっと書いていてあまりのスマートでなさに情けなくなってしまい、
お力添えをお願いしにきたのですorz
850さんの案の参考に記述してみようと思います。
ありがとうございました。
>>856 最初の部分でランダムに取り出すんじゃなくて、順番にとりだしてもいいんでないか?
ただしそのアルゴリズムでやると最悪かかる時間が指数関数になってしまう。
要素数が5個なら問題ないけど、要素数が7を超えたあたりでいつになっても終わらない状態になる。
(まあ要素数が8になると40320個あるから全部表示すること自体ないと思うけど)
以下参考までに。
function all_perms($list) {
$result = array();
foreach ($list as $i => $x) {
$copy = $list; unset($copy[$i]); // 順番に取り出す
foreach (all_perms($copy) as $each) {
array_unshift($each, $x); // 取り出したやつを戻す
$result[] = $each;
}
}
return $result ? $result : array(array());
}
$list = range(0, 4);
foreach (all_perms($list) as $each) echo implode(", ", $each), "\n";
>>858 ちょい便乗お願いします。
例えば5個の並べ替えなら俺でもなんとかわかるんだけど、
5C3とか「5個の中から3個を取り出す」って形だとどうすればいいの?
array_count_valuesって連想配列の中にある子配列?には適用できないんでしょうか? 例えば $hoge["哺乳類"]["猫科"][ ]="ネコ"; $hoge["哺乳類"]["猫科"][ ]="ライオン"; $hoge["哺乳類"]["猫科"][ ]="ピューマ"; $hoge["哺乳類"]["猫科"][ ]="ネコ"; $result = array_count_values($hoge["哺乳類"]["猫科"]); 結果 ("ネコ" => 2 , "ライオン" => 1 , "ピューマ" => 1) みたいな。 何か他の方法があったらよろしくおねがいします。
861 :
nobodyさん :2006/02/11(土) 17:10:43 ID:77G1MBCY
質問させてください curlを使ってHTMLを取得する際に そのままだとブラウザに出力されてしまいますが 文字列として変数にまるごと格納するためには ob_startなどを使うのでしょうか? それともなにかオプションなどあるのでしょうか? ファイルに出力するオプションしか見つかりませんでした。 よろしくお願いします
>>861 >ob_startなどを使うのでしょうか?
当たり。
その辺りもあって使いづらいので、自分は
最近だとHTTP_Requestクラスを使う事が多いな。
digコマンドを実行してその結果をブラウザで読める形にしたいのですが、どのようにしたらよいのでしょうか?
>>860 特に何も問題ないような気がするけど、いったいどうしたいの?
>>863 <pre>
<?php `dig 〜` ?>
</pre>
じゃダメなの?
865 :
861 :2006/02/11(土) 19:18:18 ID:???
>>862 ありがとー
HTTP_Requestクラス、さっそく調べてみますー
866 :
nobodyさん :2006/02/11(土) 19:41:39 ID:B3gU7sFS
system関数の戻り値って、どんな時にFALSE返すの? freebsdで動かしてるコードなんだけど、 if(FALSE==system("command")) この条件に、コマンドが成功してるハズなのにひっかかっちゃいます。 同様のコマンドをプロンプトで実行した際の$statusは0なんだけど・・・。
>>866 $statusってのはプログラムのステータスコードのこと?
だとしたらsystem()の第二引数で返ってくる。
falseがどんなときに返ってくるのかはわからないけど、たぶん実行ファイル自体が開けなかった場合かなんかじゃないかと。
>>859 ちょっと微妙だけどnCkだったらこんな感じかな。順列(nPk)よりは楽かも。
function next_comb(& $flags) {
$n = count($flags); $k = 0;
for ($i = $n - 1; $flags[$i]; $i --, $k ++) if ($i <= 0) return false;
for (; ! $flags[$i]; $i --) if ($i <= 0) return false;
$flags[$i] = false;
for ($i ++, $k ++; $k > 0; $i ++, $k --) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
return true;
}
function flags2list($flags) {
$result = array();
foreach ($flags as $i => $flag) if ($flag) $result[] = $i;
return $result;
}
$n = 5; $k = 3; $flags = array();
for ($i = 0; $i < $k; $i ++) $flags[$i] = true;
for (; $i < $n; $i ++) $flags[$i] = false;
echo implode(", ", flags2list($flags)), "\n";
while (next_comb($flags)) echo implode(", ", flags2list($flags)), "\n";
870 :
867 :2006/02/11(土) 20:08:34 ID:???
不覚にも笑ってしまった
半角80文字(80byte)分のデータが欲しいのですが、substrで切るとゴミが付く可能性があります。 mb_substrでは文字数になるので希望が満たせません。良い案はありませんか? $input = "あaいiうu"; $len = 7; //byte for($i=1; $i<=$len; $i++){ $out = mb_substr($input, 0, $i, SJIS); if(strlen($out) <= $len){ $output = $out; }else{ unset($out); break; } } //print $output; ちょっと微妙です。
>>869 なるほど、めちゃ助かりましたm(。。)m
ありがとうございます。
>>874 いや、869のだと多分ちゃんと算出されないと思うけどな
csvとかdatファイルの行数を数えて インクルード表示するにはどうすればいい?
echo count(file('./hoge.csv'));
879 :
ファイル操作について質問 :2006/02/12(日) 00:12:57 ID:WHPt7+3y
fsockopen、fget等を使って10MB程度のファイル(zip、lzh等)をPHPがあるサーバーに転送して、 それを1.45MBずつに分割し、さらにそれぞれのファイルの先頭に、バイナリデータを挿入するといった事は可能でしょうか?
881 :
879 :2006/02/12(日) 01:12:53 ID:???
>>880 回答ありがとうございます!これからいろいろ検索してみます。
>>873 jcode.phpの中にあるjsubstr()とか、jstrcut()とかどう?
883 :
nobodyさん :2006/02/12(日) 02:37:21 ID:nmR6R0gu
マッチしてるかどうかを判定したいんですけど、 こんな感じでカッコとかが入ってると上手くマッチ判定してくれません $hoge1="this is a pen.(cha katou) in <the drifters> on [comedian]"; $hoge2=$hoge1; if(eregi($hoge1, $hoge2))echo"hit!"; 実際は$hoge1や$hoge2は動的に変わっていくんですけど、 こういう時ってどうやればいいんでしょうか。 よろしくおねがいします。
884 :
883 :2006/02/12(日) 03:06:19 ID:???
stristrでいけました
>>873 こんなのどうでしょ?sjisかeuc限定で。utf-8とかjisだと無理。
$input = "あaいiうu"; $len = 7;
$output = substr($input, 0, ord($input{$len - 1}) & 0x80 ? $len - 1 : $len);
よろしくお願いします。 掲示板に使いたいと思うのですが、 投稿した時刻から何時間(もしくは分/秒)以内は NEWなどと表示させたい場合はどうすればいいんでしょうか? 環境はXAMPP1.5.0(Apache2.0.5.5、PHP4.4.1)です。
>>888 投稿された時間を記録しておいて、今の時間(表示された時間)との差を使えばええんでね?
てか、こんな事はすぐ思いつく筈だから何か具体的に詰まってる部分があるんだべ?
それを言ってみそ
890 :
888 :2006/02/12(日) 11:09:46 ID:???
>>889 現在年 = 投稿年
現在月 = 投稿月
であり、
現在日 = 投稿日
であった場合にNEWと表示させる。
としたのですが日にち単位でしか表示出来ず
時間単位にしたいのですが、
5時間以内(の差)はNEW表示。
としましたら、00:00になると5時間以上の差となり駄目でした。
>>890 >日にち単位でしか表示出来ず
なぜ?
>時間単位にしたいのですが、
>5時間以内(の差)はNEW表示。
>としましたら、00:00になると5時間以上の差となり駄目でした。
日にち単位でしか表示できないのに、
どうやって時間を比較した?
掲示板スクリプトは色々出回ってるから
色々調べてみることをオススメする
>>890 そういう時間差を扱う必要がある場合は、unixタイムスタンプ(time())を使うと楽だよ。
表示の時はdate()などで年月日に変換。
表示の度に変換する事に無駄を感じるなら、両方を記録しておくってのもありかと。
893 :
888 :2006/02/12(日) 11:45:07 ID:???
>>892 ありがとうございます。
やってみます。
"This is a pen."は荒井注じゃなかったか?
"This is a pen."は荒井注じゃなかったか?
896 :
888 :2006/02/12(日) 15:04:01 ID:???
投稿時刻は既に取得済($date = date(Y/m/d(D)G:i);)でしたので、 //投稿時刻分割 $t_nen = substr($date,0,4); $t_mon = substr($date,5,2); $t_day = substr($date,8,2); $t_hour = substr($date,15,2); $t_min = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_mkt = mktime($t_zi,$t_fun,0,$t_tuki,$t_hi,$t_nen); //差 $sa = $mkt - $t_mkt; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; } としてみました。これでどうでしょうか?
897 :
888 :2006/02/12(日) 15:08:19 ID:???
失礼しました。こっちです。 //投稿時刻分割 $t_nen = substr($date,0,4); $t_tuki = substr($date,5,2); $t_hi = substr($date,8,2); $t_zi = substr($date,15,2); $t_fu = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_ts = mktime($t_zi,$t_fun,0,$t_tuki,$t_hi,$t_nen); //差 $sa = $mkt - $t_ts; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; }
898 :
888 :2006/02/12(日) 15:10:18 ID:???
ごめんなさい。こっちです。 三回も連続投稿するなんて… //投稿時刻分割 $t_nen = substr($date,0,4); $t_mon = substr($date,5,2); $t_day = substr($date,8,2); $t_hour = substr($date,15,2); $t_min = substr($date,18,2); //タイムスタンプ $mkt = mktime(); $t_mk = mktime($t_hour,$t_min,0,$t_mon,$t_day,$t_nen); //差 $sa = $mkt - $t_mk; //24時間(86400秒)以内ならNEW表示 if($sa < "86400"){ $new = "NEW"; }
>>885 記述多分間違ってますよ。
実際動作させてみたら違ったから
>>896 日本語と英語が混じってるしwww
$t_mk = strtotime($date)ってやればsubstrとmktimeの山を全部省略できるよ。
>>899 とりあえず書いてある通りに実行したら
0, 1, 2
0, 1, 3
0, 1, 4
0, 2, 3
0, 2, 4
0, 3, 4
1, 2, 3
1, 2, 4
1, 3, 4
2, 3, 4
ってなったし、$nと$kを色々変えても特に問題ないと思うけど。
($n<$kにすると$n=$kっていう扱いになっちゃうってのはあるけど)
>>888 >892の言ってること理解してるか?
「取得済み」といってるがその部分を変更することが何らかの理由で不可能なの?
すでに運用していて変更すると互換性が失われるとか?
その場合、両方記録する方式は無理?ホントに無理?
クライアントからGetやPOSTで送られた全てのデータが 格納された配列ってなかったっけ? または、引数付きURLが格納された変数とか。
>>903 リクエストヘッダだったら$_SERVERとかapache_request_headers()あたりかな。
POSTのボディ部分のデータは$_POSTとか$_FILESで取得するしかないかも。
>>888 if($sa < "86400"){
$new = "NEW";
}
に
else{
$new = " ";
}
を追加すればおk。
掲示板によるね。コリャ。
908 :
nobodyさん :2006/02/12(日) 17:14:39 ID:kJteDCSc
ポートスキャンスクリプトが実行できません。
WinXP(SP2)IIS+PHP5.1.2で、
http://www.genie.x0.com/gtl/help/port_scan.php に掲示されている
「スクリプトソース」をコピーしたけどlocalhostの仮想ディレクトリで実行すると
Warning: fopen(./pscan_lock_list.txt) [function.fopen]: failed to open stream: Permission denied in C:\port\portscan.php on line 151
となってしまいます。
一応、pscan_lock_list.txtの空ファイルは存在してます。
原因見当つきません、アドバイスお願いします。
>>908 パーミッションエラーだって表示されてんだからパーミッション変えれ
910 :
nobodyさん :2006/02/12(日) 17:46:04 ID:BUa+WQJa
お時間のある方、テストランにご協力お願いします。
お散歩サイトです。
他の通行人に挨拶するというものです。
リンク先は、城下町彦根の町中です。
http://mailmart.info/pages/N351631E1361515N051112.htm 1. 画面右上のコントローラで適当に動き回ってください。
2. 私が、あなたに気づいたら、メッセージを送ります。
そのとき左フレームの犬のマークがメールを受け取ったサインを送ります。
3. その犬をクリックしてください。
チャット形式の画面に変わります。
4. 私の方のチェックボックスにマークをつけ、なんでもいいのでメッセージを送ってください。
以上です。数分で終わると思いますのでよろしくお願いします。
反応がおかしかったら、帰っていただいてもかまいません。
断る
912 :
nobodyさん :2006/02/12(日) 18:07:55 ID:BUa+WQJa
ありがとうございました。終了します。
ここ数日ググりまくったのですが一向に解決出来ないので質問させて下さい。 先日phpを5.1.2へ(5.0.4から)アップデートしたのですが、 それ以来「SquirrelMail」でメール送信時に.Sentへメールを移動させる作業でエラーが発生してしまいます。 メーラーでやると正常に.Sentへ送信済みメールが移動するので「SquirrelMail」に問題があるように考えております。 そこでphp5系で同様のメールソフトを利用されてる方で宜しければどのような設定にされましたか教えていただければ幸いです。 phpは5.1.2 でメールはqmail+Courier-IMAPで運用しています。 ちなみに、 エラー: エラー: メッセージを追加できません INBOX.Sent. サーバの応答: Error in IMAP command received by server. というメッセージが帰ってきます(エラーメッセージが漠然とし過ぎて原因が把握できていません;) php絡みということでこちらに質問させていただきました。
914 :
908 :2006/02/12(日) 19:08:57 ID:???
>>909 ありがとう、解決しました
IISにもパーミッション的な設定ってあるんだね。
勉強になりました
915 :
nobodyさん :2006/02/12(日) 22:09:09 ID:8opibPhp
IDキタコレ
∩ _,,..,,n,r'゙ <⌒つ ./ ゚ 3 ヽ )´ ) l ゚ ll ∩ ノ そ Σ `'ー---‐'' ( ⌒ヽ/V⌒v、/⌒ ビ・・・シメジ
flashとphpを組み合わせて遊んでいるのですが、 flashの使用上、flashファイルとphpファイルは同一ドメインに置かなければなりません。 ナントカしてそれをばらばらにおきたいのですが、 <?php readfile( $_REQUEST["url"] ); ?> というスクリプトをかまして読み込めばGETできることはわかりました。 しかしPOSTメソッドができないようですので、 POSTできるようにするにはどのようなスクリプトを書けばよいのでしょうか。 どうぞよろしくおねがいします。
>>917 最近、この手の質問が多いな。
つ[fsock]
FAQ
>>4 に追加要望を叫ぶなら900台に突入した今がチャンス!
8. ファイル入出力関数(fopen等)でリモートファイル扱う際の限界
→ fsockopenでソケット通信で解決
改め
→ fsockopenでソケット通信 or PEARのHTTP系 or CURLで解決
は必須ですね。
つかぬことを聞きたいのですが mysql_fetch_array()で受け取った配列データを見る場合 $array[hoge]ってな感じで普通はいけるのでしょうか? $array["hoge"]みたいにダブルクォーテーションいるのでしょうか? 実は今""なしで見れてたんですがsession_start()を入れると"を入れないと取れなくなりました。 いったい何が原因なんでしょうか・・
漏れはシングルクオーテーションという選択肢を選んでる。
>>921 error_reportingをE_ALLにしとけば(というかE_NOTICE立てとけば)$array[hoge]がバッドノーハウであることがわかると思う。
>>923 そうでしたか・・ありがとうございました。
>>921 そのままだと定数との区別がつかない
PHPは定数を調べて定義されていなければ配列のキー文字列としてあつかう
PHPに余計な手間をかけさせたくなければ素直に引用符で囲め
$abc = <<<ABC hogehoge hogehoge2 ABC; $abc = str_replace($abc, "", $abc); echo $abc; これでLinuxのdebian機で動作確認したら、正常に$abcが空になったのですが、 centos機で動作確認したら、$abcが空にならず、元の状態のままでした。 空白スペースなんかがまじってないか確認しつくしたのですが、 問題が解決しません。何か原因として予想できるようなことはあるでしょうか?
>>926 ちなみに
if($abc === $abc) print "OK";
は表示される?
>>926 $abc = str_replace($abc, "", $abc);
で空にならないなんてありえないです。
たぶんどっか書き間違えてるんでしょ。
>>926 両方のPHPのバージョンとphp.iniの設定は一緒?
たぶん、本当は、 hogehoge hogehoge2 とかじゃなくて、日本語文字列だったりするんだろうね。
931 :
926 :2006/02/13(月) 18:44:27 ID:???
>>928 おっしゃるとおりですね、説明を簡略化しようとしたのがまずかったです。
実際は
$abc = <<<ABC
hogehoge
hogehoge2
ABC;
$def = file_get_contents($abc_to_onaji);
$abc = str_replace($abc, "", $def);
echo $abc;
です、$abc_to_onajiは$abcと同じ内容のテキストファイルです。
文字コードが関係しているような気もするのですが。
>>929 同じです
>>930 半角英数字のみです
$var=file(./dir/text); $var=file(dir/text); これどっちが正しい記述の仕方?
>>932 どっちも正しい。
どちらかというと上の方が好まれる気がする。
「絶対姉弟」と「相対指定」を勉強するといいよ。
>>931 文字コードも疑わしいけど、改行コードとかも疑わしい気がする。
FTPでサーバーにアップロードする際の改行コード変換が
PHPソースとテキストファイルで食い違ったりしてないか?
絶対姉弟 なんか卑猥
936 :
nobodyさん :2006/02/13(月) 20:54:14 ID:FzTHijdm
2ch互換BBSの仕様書みたいなのまとめたサイト見たような気がするのですが忘れてしまいますた 今も残ってたら誘導おながいします
>>883 亀レスだけど
preg_quote();
だったかな?
>>936 んなもんdat見りゃすぐ再現できるだろ
>>938 dat取得時のUser-Agentって今でも monazilla/1.00 でないとダメなのか?
//なんかmoemoeとかでも取得できるわけだが...
横レスだが俺も知りたい
改造スレにも投げたのですが、急を要するようになってしまったので
こちらで質問させて頂きます。
http://f4.aaa.livedoor.jp/~muni/sc0403.html#his こちらの*更新履歴スクリプトなのですが、196行から
<center>
<form action={$PHP_SELF} method="POST">{$emsg}
<textarea name="body" cols="50" rows="3">$ebody</textarea><br>
<input type="submit" name="NEWPOST" value=" 投稿 "><br>
</form>
</center>
これに
<textarea name="subject" cols="50" rows="1">$esubject</textarea><br>
というフォーム要素を追加して
ログに「更新日時」,「サブジェクト(subject)」,「本文(body)」という順で書き込めるようにしたいのですが、
944 :
943 :2006/02/14(火) 00:38:03 ID:???
いくつかの見当づけた個所 70行 $newline = implode(",", array("$now,$tim,$body,\n")); を $newline = implode(",", array("$now,$tim,$subject,$body,\n")); 162行 $ebody = str_replace("<br />", "\n",$ebody); を $ebody = str_replace("<br />", "\n",$esubject,$ebody); のようにしたのですが、反映されません。 書き込み後のログファイルを見たら、 ”更新日時 , (空白) , 本文」 という感じになってしまいます。 (空白の部分にsubjectの要素が入るようにしたいのですが) どのようにすれば書き込み反映されるようにできるのでしょうか?
>>943 提示されてる部分だけしか見ないけど、
受信側のスクリプトの方で受け取り部分の項目を増やしてないんでしょ。
>>944 > $ebody = str_replace("<br />", "\n",$esubject,$ebody);
とりあえずこれは関数の書式からしておかしい。
で、多分そこはいじる必要ない。
70行目の修正と、ソースに何箇所もある list(〜) = explode(",", $〜); って部分で
片っ端からsubjectの項目を追加して回れば多分動くんじゃね?
しかし正直、そのプログラムは下手糞すぎて真面目に読む気がしない。
ちなみに70行目を含め、implode()の使い方を完全に勘違いしてる >その作者
947 :
946 :2006/02/14(火) 02:03:22 ID:???
あ、でも表示はともかくログファイルでデータが空白ってのは妙だな。 そもそもsubjectの<textarea>を追加するとこからして間違ってるんじゃないか? おまえ、PHP以前にHTMLからしてまともに読み書きできない人じゃない?
948 :
943 :2006/02/14(火) 02:16:40 ID:???
subjectというのは便宜上の名称で、実際には改行コード入りのタイトルをつけたい場合もあるので、 textareaである必要があります。またbody部と同様にhtmlタグを認識できる必要があります。 普通に考えればinput type=text ですけどね… ソースの上手い下手は自分には判りませんでした
949 :
946 :2006/02/14(火) 02:29:24 ID:???
>>948 違う。
textareaを追加することが間違ってるんじゃなく、HTMLの中にtextareaを追加した
「場所」が間違ってるんじゃないの?って話。HTMLをちゃんと読めってことだ。
でなきゃあの内容なら70行目を直すだけで少なくともログファイルには記録できてるはずだ。
すみません。 ・70行を $newline = implode(",", array("$now,$tim,$subject,$body,\n")); ・188行を list($tgtim,$etim,$esubject,$ebody,) = explode(",", $lines[$i]); ・フォーム部を <textarea name="subject" cols="50" rows="3">$esubject</textarea><br> <textarea name="body" cols="50" rows="32">$ebody</textarea><br> <input type="submit" name="NEWPOST" value=" 投稿 "><br> のようにしたところ、とりあえず書き込みまではできました。 が、更新履歴表示で本文にあたる部分が表示されません。 ログには 1139884457 , 06.02.14 , タイトル , 本文<br />, こんな感じに書き込まれています。(3列目までしか読んでいない?) どこかで何列目までを呼び出すかという定義がされているのでしょうか?
951 :
943 :2006/02/14(火) 02:53:01 ID:???
あ、すみません
953 :
936 :2006/02/14(火) 06:07:13 ID:4SX0mfpX
>>942 えろいひとおありがとう
バッチリでっす
imap関数を使ってWebメールを作ろうと思っているのですが 受信箱はできましたが送信済みや削除済み等別の箱を見るには どうすればよいのでしょうか?
955 :
943 :2006/02/14(火) 18:31:43 ID:???
$comという変数にbodyの内容が代入されてると思うのですが、
どこで代入されてるのかわかりません。
実動はこのような感じでタイトル部分だけが表示されます。
http://nekomimi.s91.xrea.com/test/his.php?mode=past phpの中身はこのように修正しました。
http://nekomimi.s91.xrea.com/test/his.php.txt list(〜) = explode(",", $〜);の部分を修正の旨アドバイス頂きましたが、
実際に書き替えようと思う個所が既に
list($no,$tim,$com,) = explode(",", $lines[$i]);
のように
変数が $com に置き換わっているのでどうして良いかわかりません。
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]); としてもダメですし…
どうかご教示お願いします。
956 :
nobodyさん :2006/02/14(火) 18:37:12 ID:ieP3tNy8
指定したURLのサイトにアクセスして<title>と</title>の間に挟まれている文字を検出、データベースに格納することは可能でしょうか? ソースなど可能でしたらよろしくお願いします。
#<title>(.+?)</title>#is
>>956 file_get_contents()
preg_match()
mysql_connect()
mysql_query()
959 :
nobodyさん :2006/02/14(火) 21:04:12 ID:G+1cEh6a
echo $_SERVER['SERVER_NAME']; を実行すると locahost が表示されます。 どうして localhost じゃないのでしょうか? 「l」はどこに行ってしまったのでしょうか?
960 :
nobodyさん :2006/02/14(火) 21:08:45 ID:??? BE:110979825-
>>959 httpサーバーをインスコするときに打ち間違えたんじゃないですか?
Apacheならhttpd.comfで変更できると思います。
そんな設定ファイルねーよw
962 :
nobodyさん :2006/02/14(火) 21:09:51 ID:??? BE:110979252-
httpd.confでした。
気になって調べちまったじゃねーか!
964 :
nobodyさん :2006/02/14(火) 21:24:41 ID:??? BE:166468853-
うるせー打ち間違えただけだよバカorz
>>961 ま、Apacheの設定ファイルの名前は、
自由に設定できるけどな。
966 :
nobodyさん :2006/02/14(火) 22:15:28 ID:b7AHDxRL
正規表現道場スレが落ちてるのでこっちで質問させていただきます。 mb_ereg の . は「あ」や「a」等の1文字にマッチしますが、 1Byteにマッチさせるにはどうすればいいのでしょうか? \C を使ってみると、illegal control-codeエラーが発生してしまいます。
"1byte"
mb_eregからeregにすればいいんじゃない?
@(0x8197)が、[\x81\x97]{1} にマッチするところからして どうも1Byteにマッチさせるというのは無理みたいですね。 >968 そうします
970 :
969 :2006/02/14(火) 22:46:17 ID:???
mb_ereg('^[\x00-\xff]$', '@') は PHP 4.4.2(xrea.com 多分Unix)だとマッチせず、 PHP 5.1.2(win32)だとマッチするようです。 どっちも . は1文字にマッチするようですが、鬼車の仕様なのかな
971 :
nobodyさん :2006/02/14(火) 22:47:47 ID:5b9bfYZ/
array( '1'=>'a.', 'null'=>'b', '2'=>'c', 'null'=>'d', ); CSVを出力するプログラムを改変したいのですが、 上記のような場合、4番目の配列が2番目の配列を上書きして しまいます。 2番目も空、4番目も空というふうにしたいのですが、 「array」では無理でしょうか?
>>971 各カラムを識別できるキーを別に設ければいいだけじゃないの?
最終的にそれでどんなCSV吐きたいのかさっぱり分からんので何とも言えないけど。
array( 1 => 'a' , 2 => null , 3 => 'c' , 4 => null ) ; じゃ駄目なんかい?
普通に考えたら array( 'a'=>'1', 'b'=>'null', 'c'=>'2', 'd'=>'null', ); じゃないのかそりゃ
975 :
nobodyさん :2006/02/15(水) 01:13:30 ID:1Wrene7g
gethostbyaddr()関数を非同期に実行する方法ってないですかね? 4つぐらい逆引きをいっぺんにやりたいんです 別にgethostbyaddrに特化してなくても、PHPでマルチスレッド的なことができればいいんですが マニュアルとか見た限り見当たりません
976 :
nobodyさん :2006/02/15(水) 01:17:26 ID:7M4XsU5Q
>>975 CLI版ならforkできる。
module版でもやってやれないことはないとマニュアルにはあるが動作は保障されていない。
978 :
nobodyさん :2006/02/15(水) 01:34:17 ID:1Wrene7g
980 :
>>879・ファイル転送の方法について質問 :2006/02/15(水) 07:30:16 ID:/tElmE9p
>>879 ですが、
あの後、PHP-Editorに付属しているマニュアルchmを見ながらいろいろ調べてみました。
fread()でファイル全体を読み込み、
fputs()でphpがあるサーバーに書き込みたいのですが、
filesize()は、リモートファイルでは動作しません。
何か他の関数を使うのでしょうか?
>>955 質問とは関係ないんだけどさ
$newline = implode(",", array("$now,$tim,$subject,$body,\n"));
は全く意味がない
$newline = implode(",", array($now,$tim,$subject,$body,\n));
か
$newline = "$now,$tim,$subject,$body,\n";
でいい
>>955 ざっと見たけど
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]);
で問題なさそうだけど
変数名を変えてあるのはただの気まぐれだから気にしない
クラスを使って何らかの処理をさせる場合, プロパティに全部格納する方法と, (1) class foo{ var var1; var var2; var sum; function add(){ $this->sum = $this->var1 + $this->var2; } } $a = new foo; $a->var1 = 1; $a->var2 = 2; $a->add(); echo $a->sum; メソッドの引数にして返り値でもらうのと, (2) class foo{ function add($var1,$var2){ return $var1 + $var2; } } $var1 = 1; $var2 = 2; $a = new foo; echo $a->add($var1,$var2); どっちが望ましい?どういう場合に使い分けてる?
984 :
959 :2006/02/15(水) 09:58:17 ID:6m4G3Lc6
>>960 ありがとうございます。
httpd.confをいじった時にスペルミスをしていたようです。
>>955 > $comという変数にbodyの内容が代入されてると思うのですが、
> どこで代入されてるのかわかりません。
って言うけど
> list($no,$tim,$com,) = explode(",", $lines[$i]);
↑これが代入の式だ。
いいかげん、勉強もしないでPHPいじるのやめれ。
>>983 やってみりゃ分かると思うが(1)と(2)では表示される値が違うぞ・・・
987 :
955 :2006/02/15(水) 11:11:14 ID:???
list($no,$tim,$esubject,$com,) = explode(",", $lines[$i]); としますと、今度は逆にタイトルが表示されず本文だけが表示されます。 どうしてこのようになってしまうのでしょう?
989 :
955 :2006/02/15(水) 11:49:17 ID:???
すみません
list(,$tim,$com0,$com,)=explode(",",$lines[$i]); //@@@@ past表示
$pastv.="[{$tim}]<br>$com0<br>$com <hr>\n"; //過去ログ一覧表示
こんな風にしてみたら表示されました。
各命令の役割自体は正確に理解できてませんが・・・
>>985 さんの指摘でピンときました。
コメント下さって有難うございます。
>>986 (1)のプロパティに$付けるの忘れてましたが,
実際にやってみたところどちらも同じ結果でしたよ?
>>989 なんか変な感じだけど。次からは多少は勉強してから来てください。
むちゃいうな
次スレ チン☆⌒ 凵\(\・∀・) まだぁ?
>>835 引っ掛かってるんだが、これってPHP(に限らんのだが)側でクリアできたとしても
Apache側でバッファリングしたPOSTデータはどうにもならんだろ?
建ててみる
996 :
995 :2006/02/16(木) 00:20:11 ID:???
ダメだったorz
997 :
nobodyさん :2006/02/16(木) 01:02:08 ID:BTLG/Hcs
PHPの勉強のためoscommerceを触っているのですが ちょっと変わった変数があり、いったい何をしているのかがわかりません 以下の変数はいったい何なのでしょうか? $$をつけるとどういう意味があるのでしょうか? $$link
999 :
nobodyさん :2006/02/16(木) 01:09:25 ID:BTLG/Hcs
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。