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

【PHP】下らねぇ質問はID出して書き込みやがれ 101

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/11/15(月) 13:00:07ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 100
http://hibari.2ch.net/test/read.cgi/php/1288168893/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0267nobodyさん2010/11/26(金) 19:20:15ID:???
>>266
>>262で十分理解できるだろ?>>263も明らかに見当違いの回答だし。
まぁうちには環境がないので何のアドバイスもできんが。
0268nobodyさん2010/11/26(金) 19:25:08ID:???
aviutl ダウンロードして その通りやったが、 タイトル取れるぞ。
0269nobodyさん2010/11/26(金) 19:44:57ID:???
分かち書き
0270nobodyさん2010/11/26(金) 20:40:39ID:???
ID変わって失礼します。

$cmd='tasklist /v';
exec($cmd,$ret1,$ret2);
print_r($ret1);
の結果が
http://sakuraweb.homeip.net/uploader/src/up139167.png
このようになり、aviutlだけでなく、メモ帳や専ブラ等々、全てのプログラムでウインドウタイトルがN/Aとなっていて取得できません。

phpの設定はこのような感じです。
http://sakuraweb.homeip.net/uploader/src/up139168.png

httpdの実行権限の問題かなと思ったのですが、ウインドウタイトルが取得できている方、
httpd.exeのユーザー名は何になっていますか?
http://sakuraweb.homeip.net/uploader/src/up139167.png
自分は97行目の通り、"NT AUTHORITY\SYSTEM"となっています。
0271nobodyさん2010/11/26(金) 22:19:29ID:???
> ID変わって失礼します。
> ID変わって失礼します。
> ID変わって失礼します。
0272nobodyさん2010/11/26(金) 22:25:08ID:I8yzn2Dg
age
0273nobodyさん2010/11/26(金) 22:36:35ID:???
httpd経由っすか。 
http://bbs.wankuma.com/index.cgi?mode=al2&namber=23325&KLOG=44
かな?
0274nobodyさん2010/11/26(金) 23:42:37ID:???
>>273
ありがとうございます。
ですが、このトピックの方はApacheでは実行できてIISでは実行できない
という現象みたいで、自分はApacheで実行できない状態なんです。
>>どうやら、Apacheではcmd.exeの指定は要らないが
とありますので、これじゃない と思います。
02752392010/11/27(土) 00:05:56ID:???
コンパイルは自分には難しそうなので、とりあえず以下のようにdirコマンドを使うことで解決しました。

if (strpos($filename, '\\') === false)
$files = glob($dir.$filename.'.*');
else if (preg_match('/^Windows/i', $_SERVER['OS']))
exec('dir /B "'.$dir.$filename.'.*"', $files);

ただ、dirコマンドを何度も呼ぶとヒープメモリ?を食いつぶすのか、新しいプロセスを立ち上げることができなくなります。
この状態になると、Windowsを再起動しないと何もできなくなります。
タスクマネージャを見た限りでは特にメモリは消費していないのですが…
phpを再起動させても効果はないようです。
最終的にはreaddirで何とかしようと思いますが、
ヒープメモリ?を解放する方法などがあればご教示ください。よろしくお願いします。
0276nobodyさん2010/11/27(土) 03:33:36ID:???
>>274
またサヨクがニワカで保守気取りか
0277nobodyさん2010/11/27(土) 08:32:01ID:HnSqylEA
クーポンの概要を説明した日本語の文字列の中から、
「鍋」 「焼肉」 などの文字列を検索するロジックを書いています。

mb_strpos を使っていますが、 特定の文字列が発見された時にtrueを返す
ereg関数のほうがよいでしょうか?
0278nobodyさん2010/11/27(土) 09:24:29ID:???
男は黙ってstrpos
0279nobodyさん2010/11/27(土) 11:26:16ID:???
>>276
またウヨクがニカワで捕手気取りか
0280nobodyさん2010/11/27(土) 11:27:12ID:???
>>275
終了させないとだめなんでないの?
0281nobodyさん2010/11/27(土) 15:37:06ID:???
>>275
前後のコードを見ないと何とも言えないが、
「dirコマンドを何度も呼ぶ」というのはどういう状態?
同じプログラムの中で exec('dir 〜 を何度も実行してるってこと?
$filesは毎回初期化してるの?
0282nobodyさん2010/11/27(土) 16:20:26ID:JYCUoFVz
YouTubeの動画IDのように、短くユニークなIDを生成したいのですが、どうしたらいいでしょうか?
uniqid()では同じマイクロ秒で生成されると駄目なようで、uniqid(mt_rand())では長すぎるので困っています。
0283nobodyさん2010/11/27(土) 16:33:37ID:???
IDが被らないようにループさせる
0284nobodyさん2010/11/27(土) 16:42:10ID:JYCUoFVz
言葉足らずですみません。
DBやファイルを使い生成した文字列がユニークかどうかを走査するのではなく、もっとスマートな処理方法はないでしょうか?
0285nobodyさん2010/11/27(土) 16:45:23ID:???
それを使ってるかどうかなんて何で判断するんだ
0286nobodyさん2010/11/27(土) 16:46:52ID:???
>>284
単純に連番にすりゃいいじゃねぇか
0287nobodyさん2010/11/27(土) 16:48:25ID:???
いずれにしても番号はDBかファイルに記録しなきゃ使えないじゃん
02882822010/11/27(土) 17:04:34ID:JYCUoFVz
もちろん生成したデータはDBにUNIQUEとして保存します。
ただ、保存する度に問い合わせて衝突するなら新しく生成してまた問い合わせる・・・を繰り返えすのが普通なのでしょうか?
uniqid(mt_rand(), true)を使えば膨大な量のデータがあっても衝突無しに一発で保存できます。けど文字数が多すぎます。
なので、TouTube(あるいはTinyURL)のように英字の大文字小文字を使用してより短い文字列に出来ないかと考えています。

>>286
連番では駄目です。
02892822010/11/27(土) 17:09:10ID:JYCUoFVz
>なので、TouTube
すみませんタイプミスです。正しくはYouTubeです。

書いていて気づいたのですが、要はuniqid(mt_rand(), true)で生成される文字列が大文字小文字を交えた半角英字と数字と一部の記号なら短くなりそうなので、
そういった類のスクリプト等があれば教えてください。
0290nobodyさん2010/11/27(土) 17:09:41ID:???
a-zA-Z0-9の重複順列5個取り出しで9億ぐらい作れるからあとは考えろ
0291nobodyさん2010/11/27(土) 17:10:27ID:???
ユニークかどうか走査したくないのなら
あらかじめDBにユニークIDを鬼のように入れておいて、割り当てられてないレコードを引っ張り出して処理するしかないと思うが
02922822010/11/27(土) 17:15:04ID:JYCUoFVz
>>291
それをやるなら空でInsertしたDBのauto_incrementなPRIMARYを使って再度そのレコードをUpdateした方がよくはないでしょうか?
0293nobodyさん2010/11/27(土) 17:15:15ID:???
ファイルは溜まるが
tempnam
でいけるんちゃう?
02942822010/11/27(土) 17:26:12ID:JYCUoFVz
>>293
試してみましたが、ファイル名が連番で保存されていました。

今、一つ閃いた事があるので試しきます。
上手くいけば報告します。
みなさんありがとうございました。
0295nobodyさん2010/11/27(土) 17:31:22ID:???
>>294
Windowsか
0296nobodyさん2010/11/27(土) 17:57:47ID:???
俺だったらmicrotime・2次元配列・strtoupper・strtolowerとファイル1本で処理するかなー
0297nobodyさん2010/11/27(土) 18:34:35ID:???
>>294
youtubeだって結局連番っぽいのよ。
ttp://pc.casey.jp/archives/1901
0298nobodyさん2010/11/27(土) 19:36:36ID:???
32進数とかにして、適当に大きいとこからはじめれば、連番に見えないだろ。
連番駄目なのは、どうせ見た目だけだろ、上司がそういったとか。
02992822010/11/27(土) 20:15:21ID:JYCUoFVz
仰るとおりで。
閃いた事=>>297でして、無事解決しました。
本当にありがとうございます。
0300nobodyさん2010/11/27(土) 23:39:27ID:???
昔sha1ハッシュをURLにしてたなあ…
0301nobodyさん2010/11/28(日) 00:20:55ID:???
昔sha1を62進数にしたらだいぶ短くなると思って試行錯誤したが
sha1の結果を10進数にすることが不可能だった
桁あふれ?桁おち?用語よくわかんないけど全部は出きらない感じ
あれって解決方法あったのかなぁ
0302nobodyさん2010/11/28(日) 01:29:17ID:???
16bit分ずつ切ってintに直すだけだよなー・・・こんなのでいいのかな
http://ideone.com/pKvtM
0303nobodyさん2010/11/28(日) 02:56:22ID:???
いいんじゃね。個人的には文字リストのテーブルを用意するのは好みじゃないが。
03042752010/11/28(日) 04:10:26ID:???
>>281
ありがとうございます。
関数で頻繁に呼び出しています。
メモリリークですが、どうもAviraAntiVir5が原因だったようです。
お騒がせしました。
0305nobodyさん2010/11/28(日) 04:12:42ID:???
32bit->22bitかー
7bitぐらいにするミラクルな方法はないものか
03063042010/11/28(日) 04:13:27ID:???
v10の間違いでした
http://hibari.2ch.net/test/read.cgi/sec/1290286255/11
0307nobodyさん2010/11/28(日) 04:19:36ID:???
AUTO_INCREMENTのスタートを100000000とかにしてそれを62進数変換でよくね
0308nobodyさん2010/11/28(日) 10:37:38ID:???
AUTO_INCREMENTだと結局連番になっちゃうんじゃない?
まぁアルファベットを含めた連番?だけど。
0309nobodyさん2010/11/28(日) 11:18:44ID:???
数字連番にダミー文字でも追加してやれば重複しないだろうけど数字を取りに行っている時点で
ユニーク生成しているのと大差ないからな
0310nobodyさん2010/11/28(日) 14:37:02ID:???
YouTubeが連番と聞いてURLをアルファベット一個ずつズラしていったが
3-4つくらい同じ動画になって、以降は動画が存在しないな
0311nobodyさん2010/11/28(日) 14:42:38ID:???
youtubeは-_を加えた64進数だな
0312nobodyさん2010/11/28(日) 15:15:14ID:???
それでも次の動画が見れないな
連番じゃ無いのではないか?
0313nobodyさん2010/11/28(日) 15:20:14ID:???
youtubeは最後の1bitが謎いね
0314nobodyさん2010/11/28(日) 15:20:39ID:???
最後の1bitといったらそりゃあもう
0315nobodyさん2010/11/28(日) 15:24:55ID:???
エラー検出符号か
0316nobodyさん2010/11/28(日) 15:40:17ID:???
でも1個ずつずらしても3-4個同じ動画が見れるのなら
エラーチェックの意味無いな。
0317nobodyさん2010/11/28(日) 15:41:23ID:???
つ誤り訂正
0318nobodyさん2010/11/28(日) 16:06:18ID:???
欠番は単に削除された動画では?
0319nobodyさん2010/11/28(日) 16:17:36ID:???
最後の桁の64進数(6bit)で表現できるうち、
意味を持つ有効なデータが上位4bit分しかなくて下位2bitが余っただけでしょ
よくあること
0320nobodyさん2010/11/28(日) 17:53:00ID:???
下位2bitは何で埋めるの?
0321nobodyさん2010/11/28(日) 18:12:56ID:oUHpYIlN
ログイン画面の 「次回から自動的にログイン」 のチェックボックスを作りました。

初期値で選択ずみにしようと思っているのですが、
セキュリティ的にはまずいのでしょうか?

もしNGなら、なぜダメかを教えていただければ。
0322nobodyさん2010/11/28(日) 18:14:54ID:???
>>321
別にセキュリティ的にはまずくないよ
0323nobodyさん2010/11/28(日) 18:17:54ID:oUHpYIlN
>>322

ありがとうございます。

では、特に問題はないのですね。
結構、初期値がチェックしてないサイトをよく見てたので、
ダメなのかなと思ってました。
0324nobodyさん2010/11/28(日) 18:19:27ID:???
そりゃユーザの意思で選択させるべきものに最初からチェックつけてるのはUI上おかしいからだな
0325nobodyさん2010/11/28(日) 18:20:25ID:oUHpYIlN
>>324

なるほど。では、やはりチェック外しておこうかと思います。
ありがとうございました。
0326nobodyさん2010/11/28(日) 18:42:40ID:???
>>325
便利な機能をわざわざOFFにして誰が得するんだ?
0327nobodyさん2010/11/28(日) 18:43:04ID:???
共用PCでうっかり
0328nobodyさん2010/11/28(日) 18:44:08ID:???
使ってもらうためにつけたんだろ!
Onにしないでどうする
共用PC使う人がチェク外せばいいだろ
0329nobodyさん2010/11/28(日) 18:46:49ID:???
せやな
0330nobodyさん2010/11/28(日) 18:50:33ID:???
全員が自宅のmyPCからアクセスしているとは限らない
0331nobodyさん2010/11/28(日) 18:54:50ID:???
何当たり前のこと言ってんだ
0332nobodyさん2010/11/28(日) 18:56:28ID:???
そこは、このスレじゃなくてサイトのポリシーで決めればいい
0333nobodyさん2010/11/28(日) 19:03:16ID:???
今時ブラウザ終了時にクッキーやら履歴やら消す設定にしてない人なんているのか
0334nobodyさん2010/11/28(日) 19:05:01ID:???
毎回ログイン画面が表示されるの嫌だからしてない
0335nobodyさん2010/11/28(日) 19:54:53ID:???
似たような例でいうと、Adobe Readerのダウンロードサイトに行くと、
McAfeeのダウンロードがデフォルトでチェックされているので
うっかりしていると勝手にインストールされそうになることがあるので止めて欲しい。

「次回から自動的にログイン」も同様で、チェックしたい人が意識して
チェックさせるようにすべき。
無意識ではなく、確実に本人の意思でチェックしていることが重要だと思う。
0336nobodyさん2010/11/28(日) 19:57:52ID:???
>McAfeeのダウンロードがデフォルトでチェックされているので
>うっかりしていると勝手にインストールされそうになることがあるので止めて欲しい。

わざわざAdobeが一緒に入れようとしてくる理由を考えろ
0337nobodyさん2010/11/28(日) 20:04:56ID:???
>>335
サービスの何たるかをまるで理解していない奴にそういう発言をしても無駄w
0338nobodyさん2010/11/28(日) 22:01:09ID:???
>>336
その理由を今ここで考察したって手遅れだと理解できないの?
そういう「余計なお世話」の例えだろ
0339nobodyさん2010/11/29(月) 09:32:53ID:???
>>336
お願いします。理由を教えてください。
0340nobodyさん2010/11/29(月) 17:05:50ID:???
>>336
ふーん。で、理由は?
0341nobodyさん2010/11/29(月) 19:47:56ID:8Uo/Jl2+
特定の遷移中だけクラス定義のファイルをIncludeすると何もエラー吐かずに落ちるんですが、
ob_startで設定したコールバックで$php_errormsgを見ても何もありません。
こういう場合どうやってエラーの内容確認すればいいんでしょう?
0342nobodyさん2010/11/29(月) 23:36:51ID:???
>>341
$php_errormsgはtrack_errorsが有効じゃないと何も吐かない。
なぜob_start()使うのかわからんが、使うんだったら

ob_start();
require_once 'そのクラスファイル.php'; // includeじゃなくrequire
$errmsg = ob_get_contents();
ob_end_clean();
03433422010/11/29(月) 23:40:05ID:???
ごめん、いろいろ足りてない。

error_reporting(0x7FFFFFFF); // エラー全部吐くようにする
ini_set('display_errors', 1);

が最初に必要。
0344nobodyさん2010/11/30(火) 02:43:25ID:???
error_reporting(0x7FFFFFFF);
何のための定数だよ、意味が分からなくなるだろ
error_reporting(E_ALL | E_STRICT);
こう書きなよ。

こういう「結果は同じなんだから結果だけ書いとけ」みたいな感じで書かれると
定数の意味がないし、メンテナンスが面倒だから自分が書くものだけにしてほしい
0345nobodyさん2010/11/30(火) 05:59:01ID:???
>>344
それもそうだな。とにかくエラー全部と思って
バージョン関係なくエラー全部用のコピペだったんだけど、
今回はE_ALLだけで十分だな
0346nobodyさん2010/11/30(火) 07:20:07ID:H2kkF3xU
simplexml_load_file()でブログのデータを取得してるんですけど、
サーバーメンテの際はなにも取得できません
代入したデータが空であれば、取得できませんでした、と表示させてるんですけど、
メンテで取得できない場合、simplexml_load_file()自体が
failed to open stream: HTTP request failed!
ってなってしまいます
どうすればいいでしょうか?
0347nobodyさん2010/11/30(火) 07:28:24ID:2WrqxWb3
数値について質問です。
ユーザーから受け取った数値の、百の位以下を0にしたい。

56102
↓
56000

こんな場合どうしたらいいですか?
0348nobodyさん2010/11/30(火) 07:33:26ID:???
>>347
http://www.php.net/manual/ja/function.round.php
>>346
is_file, is_readable, file_exists等
0349nobodyさん2010/11/30(火) 07:33:40ID:???
下三桁を0に置き換えればいい
0350nobodyさん2010/11/30(火) 07:41:53ID:???
>>347初心者の俺が答えてみる。

まず、文字列に変換して、
終わりから3つを0に置換して
(必要なら)再度、数値に変換する。
http://www.sasaraan.net/program/php/tips.php?id=settype(型の変換)
http://www.php-ref.com/bapi/02_substr_replace.html(置換)

もしくは、1000で割って、その余りを元の数から引けばいいんじゃないか?
03513502010/11/30(火) 07:44:00ID:???
>>348
まんまの関数があるのね。勉強になりました。
0352nobodyさん2010/11/30(火) 08:15:31ID:???
>>343
やってみます。ありがとう。
0353nobodyさん2010/11/30(火) 08:25:56ID:2WrqxWb3
>>388
>>389
>>390
ありがとうございます!
やってみます。
0354nobodyさん2010/11/30(火) 08:42:31ID:rNn1SdBy
mb_get_info('illegal_chars')
で変換に失敗したかどうか判りますが、変換に失敗した部分を抜き出す良い方法はないでしょうか?
0355nobodyさん2010/11/30(火) 08:52:40ID:???
mb_substitute_character("long") とか?
0356nobodyさん2010/11/30(火) 12:43:26ID:???
ありがとうございます。
それでも「?」に変換される文字があったりしてちょっと区別しにくいですが、
もうちょっと試行錯誤してみます。
0357nobodyさん2010/11/30(火) 13:01:55ID:???
一つの複雑なクエリーでMySQLからデータとってくるのと、シンプルなクエリーでそれぞれデータとってきてPHP側で処理させるのと、どっちが早い?
詳細の状況によると思うが、一般的にはどうかな?
0358nobodyさん2010/11/30(火) 13:54:22ID:???
>>357
一般的な話で言えばクエリーで出来る事はクエリーでやる方が圧倒的に早い
0359nobodyさん2010/11/30(火) 14:54:43ID:???
キャッシュもあるしな
0360nobodyさん2010/11/30(火) 15:57:26ID:vry2lrbm
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1351203043
この質問に回答してくれ
0361nobodyさん2010/11/30(火) 17:51:46ID:???
<?php
$kuji = array("凶","小吉","小吉","中吉","中吉","中吉","吉","吉","大吉");
$result = array();
for ($i = 0; $i < 10; $i++) {
$result[] = array_rand($kuji);
}
?>
<table>
<?php
foreach ($result as $key => $value) {
$key++;
echo "<tr><td>{$key}回目</td><td>{$kuji[$value]}</td></tr>";
}
?>
</table>
0362nobodyさん2010/11/30(火) 19:40:35ID:???
>>358
一発で欲しい形でデータを取るための複雑なクエリーで最適化できてないのもあるけど、結果取得に20秒位かかってるんだけど、クエリーはシンプルにして結果取得を短い時間でできるものにして、クエリーを複数回実行して結果を処理でなんとかしたらどうかなと思ったんだよね。
0363nobodyさん2010/11/30(火) 19:57:22ID:???
それは適切なindexが設定できていないもしくは
クエリーがきちっと最適化できてないだけじゃないの?

まぁこれ以上はシステム構成やデータ件数等も関連してくるし
スレチにもなるから若干過疎ってるがmysqlのスレ行くほうが良いよ
0364nobodyさん2010/11/30(火) 21:56:19ID:???
>>347
百で割ってから百倍すりゃいいじゃん。
0365nobodyさん2010/11/30(火) 22:28:10ID:???
PHPの場合だと
56102
↓/100
56.102
↓*100
56102
こうならないっけ?
0366nobodyさん2010/12/01(水) 01:29:45ID:???
じゃあ割ったあとに整数にすればいいじゃん
■ このスレッドは過去ログ倉庫に格納されています