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

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

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

過去スレ、関連リンク、FAQ等>>2-10辺り
0809nobodyさん2006/02/10(金) 14:36:03ID:???
>>808
使ったことないので知らないけど、マニュアル見た限りではsimplexml_load_fileはSimpleXMLElementオブジェクトを返すらしいから、そのままprintするのはまずいんじゃないの?
simplexml_load_fileとか呼び出さずにそのまま出力すればよさそうな気がする。
あと、JavaScriptの方でres.firstChildはオブジェクトっぽいからそのままalertにぶちこんでも[object]とか表示されそう。
0810nobodyさん2006/02/10(金) 14:42:09ID:???
ググりまくったけど全然情報が無いから質問させて下さい

GD関数を用いて画像を表示するプログラムを作っているのですが、jpg,png,gifは問題なく行けていて、
bmpファイルがどうしても作成できません。

例えばjpgなら、

header("Content-Type: image/jpeg");
$image = imagecreatefromjpeg("files/a.jpg");
imagejpeg($image);

とすれば出力できますが、bmpには対応する関数がありません。
どなたかbmpをブラウザに出力できる方法をご存知の方ご伝授下さい。

あとアニメーションgifに関しても教えていただければ凄く助かります(静止gifで詰まってます;
0811nobodyさん2006/02/10(金) 14:46:42ID:txESpKQg
parse_url()で取得したホスト名( www.2ch.net など)のみを表示させるにはどうしたらいいのでしょうか?
0812nobodyさん2006/02/10(金) 15:08:21ID:???
$a[0]->b = "aaa";
$a[0]->c = 11;
$a[1]->b = "bbb";
$a[1]->c = 33;

今このようにして書いてるのですが
これをarray関数などを使って
簡単に書くことはできないでしょうか?
0813nobodyさん2006/02/10(金) 15:08:38ID:???
>>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))してみれば道は開けるはず。
0814nobodyさん2006/02/10(金) 15:08:50ID:Gf4j4Lcn
>>811
<?
$url = parse_url("http://google.co.jp");
echo $url["host"];
?>
0815nobodyさん2006/02/10(金) 15:14:07ID:???
>>812
「簡単に」の定義と、値('aaa'や'11')とキーの相関関係を述べよ
0816nobodyさん2006/02/10(金) 15:16:15ID:???
>>810
アニメーションgifはImageMagick使うしかないくさい。

>>812
どうしたいのかがイマイチわかりません。
データの出所がわかればarray_walkかarray_map適当に使えばできそうだけど、そのコードじゃワケワカメ。
08178102006/02/10(金) 15:32:09ID:???
>>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);

とやってしまえば、メモリ上に一時的に画像が生成されるだけなので元ソースがぼかせるのですが、他の形式だと一筋縄では行かず詰まってます。
0818nobodyさん2006/02/10(金) 15:39:23ID:???
>>817
ファイルを出力するだけなら
header("Content-Type: " . image_type_to_mime_type(exif_imagetype($filename)));
readFile($filename);
って感じでできるよ。
このコードは画像限定だけど、画像ならだいたい一通りどの形式でもおk。
画像じゃなくてもcontent-typeさえ求めればいけるし。
0819nobodyさん2006/02/10(金) 15:51:28ID:O8bbZDPI
$pw = $_POST["pw"]; // (1) POSTデータを$pwに代入
if ( $pw == "hoge1" ) { }
elseif ( $pw > "hoge2" ) { }

入力データチェックなどで、上のように変数代入して比較の場合が多いと思いますが、
自分はなるべく変数(変数名?)の使用を減らしたい派で、(1)の処理をなくして置換してました。
(ソース的にも見やすく理解しやすかったので)

でもJavascript(DOM)の資料などを読んでいて
「エレメントの直接参照が遅いので変数に入れる」みたいなのがあったんですが、
環境変数の参照回数を減らすと速度的に良いとかありますでしょうか?
0820nobodyさん2006/02/10(金) 15:53:47ID:???
>>817
何の加工もしないのならメモリの無駄遣いじゃないか
08218192006/02/10(金) 15:56:00ID:O8bbZDPI
>環境変数の参照回数〜

グローバル変数・セッション変数や環境変数 に置き換えてください。すんまそん
0822nobodyさん2006/02/10(金) 16:01:28ID:???
>>819
その程度の処理ならどっちでやっても良いんじゃないの?
それよりも、そのサンプルの方が、コワイ(あくまでもサンプルでしょうけど)。
pwってパスワードだよね?
パスワードを平文で管理とか、文字列を大小比較していたり…
08238122006/02/10(金) 16:03:40ID:???
>>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を使ったときのような感じで書けたら
スマートかなと思って模索しているところです。
なにか方法はないでしょうか?

0824nobodyさん2006/02/10(金) 16:08:34ID:???
>>819
憎まれ口になるが、変数名は減らしたいとか増やしたいとかではなく、変数にする(名前をつける)意味があるかどうかで決めるべきで、パフォーマンスは気にするべきではないと思う(ボトルネックになっている場合を除いて)。
それでもどうしても気になるなら一応答えておくと、$_POST["pw"]を参照するよりは$pwを参照するほうが速度的には速いわな。
($_POSTかどうかが関係あるわけではなく、配列のキーである"pw"から要素にアクセスするのに時間がかかる)
JavaScriptのエレメントの直接参照(?)ってのはよーわからん。
ソースキボンヌ。

>>823
おそらくPHPにはあなたの求める構文はありません。
08258102006/02/10(金) 16:46:03ID:???
レス有難う御座いました。
無事表示できました。変に周りくどくせずにこうする方法があったとは・・・お騒がせしました;

exif_imagetype関数はphpインスコするとき付け忘れてましたので丁度よい機会なので今からphp-5.1.2にアップする際に入れる予定です。(今は5.0.5
08268192006/02/10(金) 17:10:13ID:O8bbZDPI
ああー!なるほど理解できました。
連想配列への参照速度が普通の変数より遅いだけなんですね。

これなら余程のループなどない限り気にするほどの差じゃないですね。
Cのポインタを理解して使うようになり、インタプリタでも過去の自作のを
パフォーマンスを良くするソース改善を考えてたので >>824さん蟻が豚でした
0827nobodyさん2006/02/10(金) 17:18:49ID:???
まあ、変数に代入したほうが見やすい場合が多いと思う
0828nobodyさん2006/02/10(金) 18:55:07ID:???
>>824
819じゃないけど、JavsScriptのはwindow.document.GetElementBiId("form").value という
「.」で繋いだ構文のことだと思うよ。
こういうのは何度も使うなら最初に1回変数に入れてからアクセスしろ、って話。
JavaScriptのオブジェクト参照はPHPの連想配列なんて比じゃないほど遅いからね。
ループでこんなの参照してたら楽に2〜3倍くらいの勢いで遅くなる。
0829nobodyさん2006/02/10(金) 18:56:57ID:???
>>826
やたら深い多次元配列とか多重リファレンスとかになるとこれはすげー遅いので、
そういうのはさすがに一時変数に格納したほうが速くてなおかつ見やすくなるかもね。
0830nobodyさん2006/02/10(金) 19:20:27ID:8/RW2vAn
昼間来た者です。

phpBB
http://www.phpbb.com/downloads.php

この掲示板を作ろうと思っているんです。

わかりやすく(?)説明されてるサイト
http://blog.livedoor.jp/asatprm/archives/26443248.html

とりあえず上のサイト通りやってます。
http://www.phpbb.com/downloads.php
から日本語のダウンロードをするんですよね?それとも日本語ではなくてもいいんですか?(日本語化パッケージを次にダウンロードしますし)
そこからhttp://prdownloads.sourceforge.net/phpbb/lang_japanese.zipのをダウンロードすると(http://blog.livedoor.jp/asatprm/archives/26443248.html)に書かれていますが、リンクに入るとどれをダウンロードするかわかりません。まずそこから教えてください。
一つずつクリアしていこうと思うんで力不足ながら皆さん宜しくお願いします。
0831nobodyさん2006/02/10(金) 19:50:27ID:???
>>830
http://pc8.2ch.net/test/read.cgi/php/1065334037/
0832nobodyさん2006/02/10(金) 20:09:59ID:???
PHPで変数の内容を破棄したい場合はunsetするだけで良いのでしょうか?
共有サーバー上で一時的にパスワードを入れた変数を上書きして明示的に破棄したいのですが何か方法はありませんか?
0833nobodyさん2006/02/10(金) 20:19:53ID:???
>>832
共有サーバーであることに何の問題があるのかが分からん。
ひょっとして変数ってのはCookieとかSessionとか、あるいはDBのデータのことを言ってるのか?
0834nobodyさん2006/02/10(金) 20:44:38ID:???
スレ違いかもしれませんが。

ローマ字 <=> ひらがな の相互変換ができる関数とか
クラスって何処かにありませんでしょうか?
ご存知の方がいましたらお教えください。
0835nobodyさん2006/02/10(金) 20:46:01ID:???
>>833
変数はPHPの変数です($passwdとか)
その共有サーバーはCコンパイラも解放されていてメモリを直接扱えるので
可能なら上書きして消したいのですが。
0836nobodyさん2006/02/10(金) 20:50:17ID:???
>>835
意味ない。
unset()か、別に$passwd='';で全然問題ない。
0837nobodyさん2006/02/10(金) 20:51:10ID:???
それ以前に、恐らく消す必要すらない。
0838nobodyさん2006/02/10(金) 21:27:11ID:???
みなさんがよく使うログイン・ログアウト処理の流れが知りたいです。
一応動くことは動くのですが、自己流なので心配で・・
ちなみに私が組むと

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は分からないのでファイル管理です;
よろしければ汎用のメソッドなど教えて頂けませんでしょうか?
0839nobodyさん2006/02/10(金) 21:30:22ID:???
さっき確認したらこれデータ筒抜けでしたorz
なんかに使う前で良かった。。
0840nobodyさん2006/02/10(金) 21:37:41ID:???
>>834
function HOGE($str) {
ereg_replace("a", "ア", $str);
}
こんな感じで作れ。
08418402006/02/10(金) 21:39:12ID:???
ひらがなかよorz
0842nobodyさん2006/02/10(金) 22:10:33ID:???
>>835
そこまで気にするんだったら素直に自前で立てるべきだな
0843nobodyさん2006/02/10(金) 22:46:45ID:???
>>839
筒抜けって、具体的にどんな風に??
0844nobodyさん2006/02/10(金) 22:56:16ID:???
ローマ字ひらがな変換ならマルチバイト関数で出来たと思う
0845nobodyさん2006/02/10(金) 23:57:22ID:???
PEARのAuthを。
0846nobodyさん2006/02/11(土) 00:53:40ID:???
>>844
うへ
0847nobodyさん2006/02/11(土) 00:58:51ID:???
Unknow Hard Error
0848nobodyさん2006/02/11(土) 05:25:20ID:???
おはようございます。
青 赤 黄色 緑 黒
という五種類の色があった場合、全ての組み合わせを打ち出す事は出来ないでしょうか?
つまり、この場合ですと、5*4*3*2*1の120通り全ての組み合わせを書き出したいのです。

ループを使おうと思いずっと考えてるのですが、どうしてもいい案が浮かびません。
宜しければ教えて頂ければ幸いです。
0849nobodyさん2006/02/11(土) 08:48:34ID:???
>>848
まず、思い浮かんだ悪い案を提示してください。
0850nobodyさん2006/02/11(土) 08:55:37ID:???
>>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";
}
0851nobodyさん2006/02/11(土) 09:30:53ID:???
>>850
すぐに何か書いちゃダメだよ。
まず本人に考えるクセをつけさせないと。
0852nobodyさん2006/02/11(土) 09:50:29ID:???
すんません!おっしゃるとおりです!

(´-`).。oO(あほか・・・)
08538502006/02/11(土) 10:04:43ID:???
よく見たら最初の一個表示するの忘れてた。
付け加えといて。
0854nobodyさん2006/02/11(土) 11:21:06ID:???
>>852は、

(´-`).。oO(あほだ・・・)
0855nobodyさん2006/02/11(土) 11:30:31ID:???
次の方どうぞー
0856nobodyさん2006/02/11(土) 12:28:49ID:???
>>850
ありがとうございます。
一応、自分の考えた案は、5つの数字からランダムで5つ順番に取り出し、
(一つ目を取ったら二つ目は一つ目と被らないように・・・と五つ取るのですが)
それで、一つ書き出します。同じように、まだ5つ取り出して取り出したのが既存のとかぶっていたらまたはじめから・・・
と、5*4*3*2*1個書き出されるまでループさせる案ですが、

ずらーっと書いていてあまりのスマートでなさに情けなくなってしまい、
お力添えをお願いしにきたのですorz

850さんの案の参考に記述してみようと思います。
ありがとうございました。
0857nobodyさん2006/02/11(土) 13:01:19ID:???
>>856
まず数学の勉強したら?
0858nobodyさん2006/02/11(土) 13:15:39ID:???
>>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";
0859nobodyさん2006/02/11(土) 16:19:02ID:???
>>858
ちょい便乗お願いします。
例えば5個の並べ替えなら俺でもなんとかわかるんだけど、
5C3とか「5個の中から3個を取り出す」って形だとどうすればいいの?
0860nobodyさん2006/02/11(土) 16:38:52ID:???
array_count_valuesって連想配列の中にある子配列?には適用できないんでしょうか?

例えば
$hoge["哺乳類"]["猫科"][ ]="ネコ";
$hoge["哺乳類"]["猫科"][ ]="ライオン";
$hoge["哺乳類"]["猫科"][ ]="ピューマ";
$hoge["哺乳類"]["猫科"][ ]="ネコ";

$result = array_count_values($hoge["哺乳類"]["猫科"]);

結果 ("ネコ" => 2 , "ライオン" => 1 , "ピューマ" => 1)

みたいな。
何か他の方法があったらよろしくおねがいします。
0861nobodyさん2006/02/11(土) 17:10:43ID:77G1MBCY
質問させてください

curlを使ってHTMLを取得する際に
そのままだとブラウザに出力されてしまいますが
文字列として変数にまるごと格納するためには
ob_startなどを使うのでしょうか?
それともなにかオプションなどあるのでしょうか?
ファイルに出力するオプションしか見つかりませんでした。
よろしくお願いします
0862nobodyさん2006/02/11(土) 17:24:55ID:???
>>861
>ob_startなどを使うのでしょうか?
当たり。

その辺りもあって使いづらいので、自分は
最近だとHTTP_Requestクラスを使う事が多いな。
0863nobodyさん2006/02/11(土) 18:06:20ID:???
digコマンドを実行してその結果をブラウザで読める形にしたいのですが、どのようにしたらよいのでしょうか?
0864nobodyさん2006/02/11(土) 18:21:45ID:???
>>860
特に何も問題ないような気がするけど、いったいどうしたいの?

>>863
<pre>
<?php `dig 〜` ?>
</pre>
じゃダメなの?
08658612006/02/11(土) 19:18:18ID:???
>>862
ありがとー
HTTP_Requestクラス、さっそく調べてみますー
0866nobodyさん2006/02/11(土) 19:41:39ID:B3gU7sFS
system関数の戻り値って、どんな時にFALSE返すの?
freebsdで動かしてるコードなんだけど、
if(FALSE==system("command"))
この条件に、コマンドが成功してるハズなのにひっかかっちゃいます。
同様のコマンドをプロンプトで実行した際の$statusは0なんだけど・・・。
0867nobodyさん2006/02/11(土) 19:51:21ID:???
>>866
===で比較すれ
0868nobodyさん2006/02/11(土) 19:55:38ID:???
>>866
$statusってのはプログラムのステータスコードのこと?
だとしたらsystem()の第二引数で返ってくる。
falseがどんなときに返ってくるのかはわからないけど、たぶん実行ファイル自体が開けなかった場合かなんかじゃないかと。
0869nobodyさん2006/02/11(土) 20:00:07ID:???
>>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";
08708672006/02/11(土) 20:08:34ID:???
>>867
ありがとう。
カッコイイ。
0871nobodyさん2006/02/11(土) 20:14:39ID:???
>>870
自画自賛かよ!
0872nobodyさん2006/02/11(土) 21:20:56ID:???
不覚にも笑ってしまった
0873nobodyさん2006/02/11(土) 21:23:42ID:???
半角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;

ちょっと微妙です。
0874nobodyさん2006/02/11(土) 21:27:35ID:???
>>869
なるほど、めちゃ助かりましたm(。。)m
ありがとうございます。
0875nobodyさん2006/02/11(土) 21:36:45ID:???
>>874
いや、869のだと多分ちゃんと算出されないと思うけどな
0876nobodyさん2006/02/11(土) 23:35:13ID:???
csvとかdatファイルの行数を数えて
インクルード表示するにはどうすればいい?
0877nobodyさん2006/02/11(土) 23:36:21ID:???
echo count(file('./hoge.csv'));
0878nobodyさん2006/02/11(土) 23:37:28ID:???
>>876
インクルード表示って何だ?
0879ファイル操作について質問2006/02/12(日) 00:12:57ID:WHPt7+3y
fsockopen、fget等を使って10MB程度のファイル(zip、lzh等)をPHPがあるサーバーに転送して、
それを1.45MBずつに分割し、さらにそれぞれのファイルの先頭に、バイナリデータを挿入するといった事は可能でしょうか?
0880nobodyさん2006/02/12(日) 01:09:16ID:???
>>879
可能

>>873
スルー カワイソス...
08818792006/02/12(日) 01:12:53ID:???
>>880
回答ありがとうございます!これからいろいろ検索してみます。
0882nobodyさん2006/02/12(日) 01:50:39ID:???
>>873
jcode.phpの中にあるjsubstr()とか、jstrcut()とかどう?
0883nobodyさん2006/02/12(日) 02:37:21ID:nmR6R0gu
マッチしてるかどうかを判定したいんですけど、
こんな感じでカッコとかが入ってると上手くマッチ判定してくれません

$hoge1="this is a pen.(cha katou) in <the drifters> on [comedian]";
$hoge2=$hoge1;
if(eregi($hoge1, $hoge2))echo"hit!";

実際は$hoge1や$hoge2は動的に変わっていくんですけど、
こういう時ってどうやればいいんでしょうか。
よろしくおねがいします。
08848832006/02/12(日) 03:06:19ID:???
stristrでいけました
0885nobodyさん2006/02/12(日) 04:28:13ID:???
>>875
算出されないって?
0886nobodyさん2006/02/12(日) 04:34:48ID:???
>>873
こんなのどうでしょ?sjisかeuc限定で。utf-8とかjisだと無理。
$input = "あaいiうu"; $len = 7;
$output = substr($input, 0, ord($input{$len - 1}) & 0x80 ? $len - 1 : $len);
0887nobodyさん2006/02/12(日) 05:56:45ID:???
>>873
mb_strimwidth()
0888nobodyさん2006/02/12(日) 10:16:29ID:???
よろしくお願いします。
掲示板に使いたいと思うのですが、
投稿した時刻から何時間(もしくは分/秒)以内は
NEWなどと表示させたい場合はどうすればいいんでしょうか?

環境はXAMPP1.5.0(Apache2.0.5.5、PHP4.4.1)です。
0889nobodyさん2006/02/12(日) 10:20:50ID:???
>>888
投稿された時間を記録しておいて、今の時間(表示された時間)との差を使えばええんでね?
てか、こんな事はすぐ思いつく筈だから何か具体的に詰まってる部分があるんだべ?
それを言ってみそ
08908882006/02/12(日) 11:09:46ID:???
>>889
現在年 = 投稿年
現在月 = 投稿月
であり、
現在日 = 投稿日
であった場合にNEWと表示させる。

としたのですが日にち単位でしか表示出来ず
時間単位にしたいのですが、
5時間以内(の差)はNEW表示。
としましたら、00:00になると5時間以上の差となり駄目でした。
0891nobodyさん2006/02/12(日) 11:33:19ID:???
>>890

>日にち単位でしか表示出来ず
なぜ?

>時間単位にしたいのですが、
>5時間以内(の差)はNEW表示。
>としましたら、00:00になると5時間以上の差となり駄目でした。
日にち単位でしか表示できないのに、
どうやって時間を比較した?

掲示板スクリプトは色々出回ってるから
色々調べてみることをオススメする
0892nobodyさん2006/02/12(日) 11:43:06ID:???
>>890
そういう時間差を扱う必要がある場合は、unixタイムスタンプ(time())を使うと楽だよ。
表示の時はdate()などで年月日に変換。
表示の度に変換する事に無駄を感じるなら、両方を記録しておくってのもありかと。
08938882006/02/12(日) 11:45:07ID:???
>>892
ありがとうございます。
やってみます。
0894nobodyさん2006/02/12(日) 12:01:50ID:???
"This is a pen."は荒井注じゃなかったか?
0895nobodyさん2006/02/12(日) 12:02:19ID:???
"This is a pen."は荒井注じゃなかったか?
08968882006/02/12(日) 15:04:01ID:???
投稿時刻は既に取得済($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";
}

としてみました。これでどうでしょうか?
08978882006/02/12(日) 15:08:19ID:???
失礼しました。こっちです。

//投稿時刻分割
$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";
}
08988882006/02/12(日) 15:10:18ID:???
ごめんなさい。こっちです。
三回も連続投稿するなんて…

//投稿時刻分割
$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";
}
0899nobodyさん2006/02/12(日) 15:12:29ID:???
>>885
記述多分間違ってますよ。
実際動作させてみたら違ったから
0900nobodyさん2006/02/12(日) 15:27:51ID:???
>>896
日本語と英語が混じってるしwww
$t_mk = strtotime($date)ってやればsubstrとmktimeの山を全部省略できるよ。
0901nobodyさん2006/02/12(日) 15:34:04ID:???
>>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っていう扱いになっちゃうってのはあるけど)
0902nobodyさん2006/02/12(日) 15:45:40ID:???
>>888
>892の言ってること理解してるか?
「取得済み」といってるがその部分を変更することが何らかの理由で不可能なの?
すでに運用していて変更すると互換性が失われるとか?
その場合、両方記録する方式は無理?ホントに無理?
0903nobodyさん2006/02/12(日) 15:52:47ID:???
クライアントからGetやPOSTで送られた全てのデータが
格納された配列ってなかったっけ?
または、引数付きURLが格納された変数とか。
0904nobodyさん2006/02/12(日) 16:00:23ID:???
>>903
リクエストヘッダだったら$_SERVERとかapache_request_headers()あたりかな。
POSTのボディ部分のデータは$_POSTとか$_FILESで取得するしかないかも。
0905nobodyさん2006/02/12(日) 16:01:30ID:???
>>903
$_REQUEST
0906nobodyさん2006/02/12(日) 16:04:38ID:???
>>904
>>905
サーーンクス!助かったぜい!
0907nobodyさん2006/02/12(日) 16:12:13ID:???
>>888
if($sa < "86400"){
$new = "NEW";
}

に

else{
$new = " ";
}

を追加すればおk。
掲示板によるね。コリャ。
0908nobodyさん2006/02/12(日) 17:14:39ID: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の空ファイルは存在してます。
原因見当つきません、アドバイスお願いします。
レス数が900を超えています。1000を超えると表示できなくなるよ。