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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2011/08/30(火) 17:23:31.78ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 109
http://hibari.2ch.net/test/read.cgi/php/1311803617/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0837nobodyさん2011/09/21(水) 17:37:52.74ID:???
お絵かきサイトから画像をとって表示しようと思った場合どうすればいいんですか?
HTML文取ってきて正規表現でURLの部分とるとかですか?
あとログインが必要なサイトの場合はどうすればいいんでしょうか
0838nobodyさん2011/09/21(水) 17:47:47.88ID:???
PHP 5.4.0 beta1でphpサーバー機能使ってる時、http://localhost/でindex.htmlが無い時index.phpを読み込んでくれません
Apacheに入れてた時はApacheから設定出来たけど、php単体ではどこから設定したらよいのでしょうか
win7 64bitです
0839nobodyさん2011/09/21(水) 18:01:11.18ID:???
phpサーバー機能ってなんだ?
素直にサーバーいれて動作チェックすればいいじゃん。
0840nobodyさん2011/09/21(水) 18:10:08.09ID:???
エスパーさん、こっちこっち
08418382011/09/21(水) 18:23:40.45ID:???
ごめんなさい正式名称を調べてませんでした
http://php.net/manual/ja/features.commandline.webserver.php のビルトインウェブサーバー です
php -S localhost:80 -t "C:\_MyProgram\php\docRoot"
で立ち上げています。このマニュアルには
>>URI リクエストにファイルが含まれない場合は、指定したディレクトリにある index.php あるいは index.html を返します。どちらも存在しない場合はレスポンスコード 404 を返します。
とあるのに、index.phpしか存在しないディレクトリに http://localhost/ でアクセスした時、コンソールには
PHP 5.4.0beta1 Development Server started at Wed Sep 21 18:19:36 2011
Listening on localhost:80
Document root is C:\_MyProgram\php\docRoot
Press Ctrl-C to quit.
[Wed Sep 21 18:19:38 2011] ::1:54834 [200]: /index.php
[Wed Sep 21 18:19:38 2011] ::1:54835 [200]: /index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
[Wed Sep 21 18:19:38 2011] ::1:54836 [200]: /index.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
[Wed Sep 21 18:19:39 2011] ::1:54838 [404]: /favicon.ico - No such file or directory
[Wed Sep 21 18:19:40 2011] ::1:54843 [404]: / - No such file or directory
[Wed Sep 21 18:19:40 2011] ::1:54844 [404]: /favicon.ico - No such file or directory
と、表示され
Not Found
The requested resource / was not found on this server.
とブラウザに表示されます
08428382011/09/21(水) 18:25:08.27ID:???
>>841のコンソールに表示されるテキストは
PHP 5.4.0beta1 Development Server started at Wed Sep 21 18:24:14 2011
Listening on localhost:80
Document root is C:\_MyProgram\php\docRoot
Press Ctrl-C to quit.
[Wed Sep 21 18:24:15 2011] ::1:55038 [404]: / - No such file or directory
[Wed Sep 21 18:24:15 2011] ::1:55039 [404]: /favicon.ico - No such file or directory

の間違いでした。>>841http://localhost/index.phpを指定した時の物でした
0843nobodyさん2011/09/21(水) 18:51:25.69ID:WzjWBGg6
画像アップロード時の画像ファイル名が半角英数字や記号以外に日本語などを使っているときにエラーメッセージを出したいです。
正規表現で弾けばいいのかなと思ったんですが、こういうときってどういう正規表現を書けばいいんですか?
日本語正規表現で検索してもこれだっていうのがなかったのでどなたか教えてください。

ちなみに文字コードはUTF-8でデータベースには文字化けしないでファイル名が入るんですが
日本語のファイル名だと画像ディレクトリに送ったファイルが文字化けしてしてしまいます。
また正規表現で弾く以外に解決法があれば教えて下さい。

環境はPHP 5 mysql windowsXPです。
XAMMPでローカルでやってます。
0844nobodyさん2011/09/21(水) 19:29:03.72ID:X6W74pr3
いつもお世話になっております
見よう見まねでページャを作ってみました。以下ソース
for($n = 1; $n <= $pages; $n++ ) {
if($n == $page){
$link .= '<li><div class=""><div class="">'.$n.'</div></div></li>';
} else {
$link .= '<li><div class=""><a href="'.$script.'?page='. $n .'">'.$n.'</a></div></li>';
}
このままだと50ページあったら1〜50までダーッと表示されてしまいます。↓
123456789101112131415161171819202122232425...
これを、任意の数までしか表示されないようにするにはどうすればいいでしょうか。こんな感じです↓
12345 5ページ目まで行くと 34567  
このように、ある程度まで行くと中心に現在のページがくるようにもしたいです。つまるところのxvideosのページャです
xvideos → http://www.xvideos.com/
よろしくお願いします
0845nobodyさん2011/09/21(水) 19:33:22.06ID:???
>>836
芥川の元ネタな
芥川のリメイクより古文のオリジナルを習う方が多いんじゃないかなぁ

#スレチすまそ
0846nobodyさん2011/09/21(水) 19:41:36.04ID:???
>>844
$first_page = $pages - ($pages - 1) % 50;
$last_page = $first_page + 49;
for($n = $first_page; $n <= $last_pages; $n++ ) {
・・・
}
0847nobodyさん2011/09/21(水) 19:51:35.67ID:???
>>837
DOM使うと楽
文法違反のサイトなら読み込む時だけエラー抑制
ログインは普通にログインして取ればいい

>>843
半角でもURLに使えん文字はあるよ。 [^URLに使える文字] で弾けば?
もしくは文字コード揃えてパーセントエンコーディングするか
0848nobodyさん2011/09/21(水) 20:46:54.04ID:WzjWBGg6
>>847
ありがとうございます!

("/[^-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]/")

とりあえず上のように書いたら、日本語ファイル名は弾かれて、普通の半角英数字のファイル名はアップロードできるようになりました。
0849nobodyさん2011/09/21(水) 21:34:13.93ID:???
>>848
半角ピリオドや括弧がエスケープされてないぞ
0850nobodyさん2011/09/21(水) 22:06:38.59ID:X6W74pr3
>>864
うーん...できないですね
とりあえず試行錯誤して頑張ってみます
もし他の方法があったら教えて下さい
0851nobodyさん2011/09/21(水) 23:32:37.71ID:???
<?php echo $a; ?>

<?php echo $a ?>
ってどっちがいいですか?
0852nobodyさん2011/09/21(水) 23:35:02.23ID:???
>>848
それ予約文字から何でもかんでも入ってるじゃん
("/[^-._~a-zA-Z0-9]/")
0853nobodyさん2011/09/22(木) 00:26:27.94ID:3wgxkSpf
【OS名】Windows7
【PHPのバージョン】5.35
【連携ソフトウェア】XAMMP
【質問内容】
PHPでユーザログインのシステムを作成中です。
重複したユーザ名が登録された時、はじく仕組みを作りたいのですが、
mysql_query()で取得した結果があるかないかを判定する関数はあるのでしょうか?
mysql_result()などを使うと、存在しない場合はエラーが出てしまいます(存在しない行を参照するため)

何かいい方法、適当な関数があればご教授願います。よろしくお願いします。
0854nobodyさん2011/09/22(木) 00:43:27.07ID:???
>>853
mysqlのクエリでcount()を使う
0855nobodyさん2011/09/22(木) 00:45:18.76ID:???
>mysql_result()などを使うと、存在しない場合はエラーが出てしまいます(存在しない行を参照するため)
fetchでぶんぶん回すのが一般的じゃね?
イテレーターのインターフェースだとカウントなんて基本考えない。
(postgresだが、石井さんの本にも確かカウント数えるのにぶんぶん回して$i++とかやってるのあったよーな。)

ほんとにレコード数が欲しいだけなら、SQLのcount()を使う。
(と、いう事を覚えておけば、ORMとか見ると合点いくところあるんじゃないかねぇ?)
0856nobodyさん2011/09/22(木) 00:49:51.04ID:4MH/JO69
空要素の削除って検索すると2つあったのですが

$piyo_array = array_diff( $hoge_array, array( "" ) );

$out = array_merge(array_diff($in, array("")));
どちらがいいのでしょうか?
08578532011/09/22(木) 00:52:35.29ID:3wgxkSpf
>>854
>>855
回答有り難うございました。count試してみます。

fetchを使うと行数が長くなるのでスマートな書き方があるのかな?
と思って質問させて頂きました。
0858nobodyさん2011/09/22(木) 02:09:20.51ID:???
>>855
カウントするのがメインでぐるぐる回してたのなら石井さんがトチ狂ったんだろうと思う
でも石井さんはトチ狂わないので>>855が何か勘違いしている
0859nobodyさん2011/09/22(木) 03:41:06.87ID:???
>>858
一致するレコードがあるかどうかを総当たりする以外に方法はないと思うので、ぐるぐる回しはやむを得ないのでは?
0860nobodyさん2011/09/22(木) 04:50:30.90ID:???
>>859
それは石井さんがやってたやつの話?
今回のであれば、回す必要などなかろ
0861nobodyさん2011/09/22(木) 06:03:16.97ID:???
普段どんなSQLを書いてるのか恐ろしくなるな

>>856
http://php.net/manual/ja/function.array-filter.php#example-4210

もしくは明示的に
$a = array('a', '', 'b', 'c');
$b = array_filter($a, 'strlen');

キーを振りなおしたいなら更に
$c = array_values($b);
0862nobodyさん2011/09/22(木) 12:41:44.45ID:4MH/JO69
>>861
ありがとうこざいます
0863nobodyさん2011/09/22(木) 14:21:43.73ID:???
お安い御用です。
0864nobodyさん2011/09/22(木) 14:57:56.86ID:wgnnkyS+
教えてください。
PHPで絵文字対応の日記サイトみたいなのを作っています。
携帯からも投稿出来るようにしており、携帯のウェブフォームから入力するときに、絵文字は[[hare]]みたいな感じに変換して
PC上ではそれに対応した画像を表示するようにしています。

携帯のメールでも日記が書けるように対応したのですが、絵文字関連で困っています。
メールを送ったら日記が登録出来る部分は完成したのですが、絵文字を入れてしまうと絵文字の部分が「(太い)=」(ゲタというのかな)になってしまいます。
携帯Webフォームと携帯メールでは絵文字の送出コードが違うのでしょうか?
ちなみにWebサイトはUTF-8で作っており、絵文字コードもUTF-8を使っています。
0865nobodyさん2011/09/22(木) 15:04:36.80ID:???
>>864
回答できなくてもうしわけないんだけれど
> 携帯Webフォームと携帯メールでは絵文字の送出コードが違うのでしょうか?
これに関しては、そこで保存されてるデータを見れば分かるんじゃないですか
0866nobodyさん2011/09/22(木) 15:18:48.13ID:???
>>864
恐らくauで問題が出てるんだろうが
PHPに関係ないから他の板で聞いて
http://www.au.kddi.com/ezfactory/tec/spec/3.html
0867nobodyさん2011/09/22(木) 17:17:56.46ID:GYZEFe+R
if(strstr($_SERVER['HTTP_USER_AGENT'],"iPhone|Android|blackberry")){

こういう風に複数個指定したいのですが↑これではエラーになります。
どういう風に記述したら良いんでしょうか?
0868nobodyさん2011/09/22(木) 17:31:32.29ID:???
if(strstr($_SERVER['HTTP_USER_AGENT'],"iPhone") ||
strstr($_SERVER['HTTP_USER_AGENT'],"Android") ||
strstr($_SERVER['HTTP_USER_AGENT'],"blackberry")){
0869nobodyさん2011/09/22(木) 18:00:11.60ID:wgnnkyS+
>864です。
ありがとうございます。
あれから色々調べてみましたが、どうもドコモとSBではPC宛のメールで絵文字が使われていた場合、絵文字を「=」に変換してしまうそうで、
完全に絵文字に対応させる事は出来なさそうですので、あきらめました・・・。
絵文字は奥が深いなぁ・・・。
0870nobodyさん2011/09/22(木) 18:25:42.65ID:???
ガラパゴスのクソ仕様ね
0871nobodyさん2011/09/22(木) 18:38:32.54ID:GYZEFe+R
>>868
やはりそれしかだめですか・・・
ありがとうございました!
0872nobodyさん2011/09/22(木) 19:08:12.41ID:???
ケータイの絵文字って日本だけの創作?
0873nobodyさん2011/09/22(木) 19:19:48.23ID:???
>>871
・正規表現を使う
・iPhone Android blackberryを配列にいれて、ループでまわす
代替手段としてこういうのがありはするけれど、UA判別ならベタでいいんじゃないかなーと
0874nobodyさん2011/09/22(木) 22:38:37.73ID:oifAShVU
基本的な文法を理解した程度です。関数とか覚えるために要領を掴むために
100行以内ぐらいのサンプルスクリプトとか乗ってるお勧めのサイトおしえてください
0875nobodyさん2011/09/22(木) 23:08:34.61ID:???
お安い御用です。
0876nobodyさん2011/09/22(木) 23:10:43.08ID:???
>>858
トチ狂っててスマンカッタ。
カウントするのがメインじゃない事は覚えてたんだが、$i++が印象に残っていたもんでついつい書いちまっただけなんだ。
よくよく思い出すと、データベースのoffset対応が怪しかった時代に、ページネートするソースの一部だった気がする。
オレがPostgresいじりだした時にはすでにoffset対応してたから、石井さんのソースだったじゃなかったかもしれん。
0877nobodyさん2011/09/23(金) 00:44:14.87ID:Qj3Cu7pD
質問です
$str=”60*60*24”;
のように、文字列型になってしまったものを、再度、60*60*24 のように数式に変換することは可能でしょうか

具体的には、Queryで渡って来た文字列を数式として実行し、60*60*24 の解を返したいんですが
0878nobodyさん2011/09/23(金) 00:44:24.57ID:y6S3nqex
大学で借りてきたphpの本が返す期限を過ぎてしまいました。
鬼のように怖い図書室のおばちゃんにどんな言い訳したらいいですか?
0879nobodyさん2011/09/23(金) 01:29:11.83ID:???
iM@Sカードゲームって
どういうバトルが繰り広げられるんだ?
0880nobodyさん2011/09/23(金) 01:29:46.81ID:???
スマン誤爆したw
0881nobodyさん2011/09/23(金) 02:14:10.27ID:/HZvV+Un
クライアント側(GoogleChrome)で
function doFire(){
httpoj = new XMLHttpRequest();
httpoj.open("POST","do.php",true);
httpoj.setRequestHeader("content-type","application/x-www-form-urlencoded");
httpoj.onreadystatechange = function(){
var res="readyState="+httpoj.readyState+" / response="+httpoj.response;
console.log(res);
}
httpoj.send("key=hoge&file=DESKTOPBASENAME");
}

サーバーサイドで
header("Content-Type:text/html;charset=UTF-8");
header("Cache-Control: no-cache, must-revalidate");
if(!$_POST["key"]){print("NG");}else{print("OK");}
print("/".date(DATE_ISO8601));
exit();

と、あります。
クライアント側でdoFire()を十分な時間を開けて(httpoj.readyStateが4になって受信完了したのを確認して)何度か実行しているのですが
OKとNGが全く規則性なく、酷い時は交互に返って来るのですがどうすれば確実に$_POSTを渡せるのでしょうか

ググると"application/x-www-form-urlencoded"のヘッダーを付けるんだよというのが沢山引っかかるのですが、付けても確実に値を渡すことは出来ませんでした
0882nobodyさん2011/09/23(金) 02:45:20.82ID:???
>>877
for Linux

<?php
 //php で四則演算を解読させるのが面倒臭いので
 //計算自体はシェルコマンド(expr)にやらせる。
 //但し、exprが解読出来るように整形する必要がある
 //
 //注:exprは、整数しか処理できない。

 $str = "60*60*25";

 $pattern = array('#\+#', '#-#', '#\*#', '#/#');
 $replace = array(' + ', ' - ', ' \* ', ' / ');
 $formatted = preg_replace($pattern, $replace, $str);

 $result = exec ('expr ' . $formatted);
 echo $result;
?>

Windows の場合はシラネ
0883nobodyさん2011/09/23(金) 02:47:06.18ID:???
>>877
http://php.net/manual/ja/function.eval.php
0884nobodyさん2011/09/23(金) 04:20:43.21ID:???
execもevalも微妙
構文解析でやるのが妥当かと
0885nobodyさん2011/09/23(金) 06:09:58.76ID:???
なんでevalが微妙なの?
見たところ、シェルにやらせるよりはスマートだと思ったけど。
0886nobodyさん2011/09/23(金) 08:37:04.75ID:???
そのまんまevalだとセキュリティ上気持ちよくないからじゃね?
(評価させる変数が外部から来ている場合、なんやらinjectionとか発生するってーこと)

まぁ、そんなの関係なく「構文解析はロマンだぜ!」という意図なら、オレも同意だがw
0887nobodyさん2011/09/23(金) 15:05:42.33ID:???
PHPを最近勉強し始めた初心者です。
ヘキサダンプの文字列をバイナリに変換して、ファイルに保存したいのですが、ヘキサダンプをバイナリに変換する方法
がわかりません。ご存知の方がいましたら教えていただけないでしょうかm(_ _)m
0888nobodyさん2011/09/23(金) 16:42:00.94ID:???
基礎が無いからできないんだよ
08898872011/09/23(金) 17:37:21.67ID:HYX5LAkU
自己解決しました
0890nobodyさん2011/09/23(金) 18:48:51.64ID:???
お安い御用です。
0891nobodyさん2011/09/23(金) 19:21:42.21ID:???
>>887
http://php.net/manual/ja/function.unpack.php
0892nobodyさん2011/09/23(金) 19:22:33.52ID:???
>>891
>>889
0893nobodyさん2011/09/23(金) 20:12:37.91ID:???
phpでmysqlに接続するとき
mysql_connect('localhost','root','パスワード');
にすると思うけど、パスワード設定していないときはどう書けばいいのでしょうか?

ちなみにWindowsにXammpインスコして勉強中です。
パスワード設定してないので今は
対象のコンピュータによって拒否されたため、接続できませんでした。と表示されてます
0894nobodyさん2011/09/23(金) 20:15:32.97ID:???
>>893
>>1
0895nobodyさん2011/09/23(金) 20:17:01.69ID:h0s7sYZM
すんませんsageにチェックがはいったままでした
0896nobodyさん2011/09/23(金) 21:48:25.58ID:???
試してないから間違えてるかもしれんけど、ふつうに書けばいけると思ったよ
ただ、mysql側の設定でパスワード無しの場合にはじかれて往生したような気がする
localの場合にはパスワード無しでいい、というような設定がたぶんできる
0897nobodyさん2011/09/23(金) 23:08:33.29ID:???
試間違書思
側設定無場合往生気
場合無設定
0898nobodyさん2011/09/23(金) 23:09:20.22ID:???
>>897
はがない
0899nobodyさん2011/09/24(土) 00:35:57.94ID:???
mysql_connect('localhost','root','');
でいけると思うが
0900nobodyさん2011/09/24(土) 01:26:24.92ID:???
0901nobodyさん2011/09/24(土) 02:07:28.88ID:3Mrta0IS
curlでヘッダーとボディを分けたいのですが


if (preg_match("/^(.*)\r\n\r\n/s", $response_body, $header)) {

 $response_header = $header[0];

 $response_body = preg_replace("/^.*\r\n\r\n/s", '', $response_body);

}

これだとLocationで飛ばされた場合ヘッダーが残ってしまいます。
どう分けるべきでしょうか
0902nobodyさん2011/09/24(土) 02:26:34.74ID:MalQcT1d
? みたいなコードをデコードして全角スペースに変換する関数などは
PHPにありますか?
0903nobodyさん2011/09/24(土) 02:27:18.04ID:MalQcT1d
失礼しました。
&#12288; こんなコードです。
0904nobodyさん2011/09/24(土) 03:04:25.67ID:???
header('Content-Type: text/html; charset=UTF-8');
echo 'あ' . mb_convert_encoding('&#12288;', 'UTF-8', 'HTML-ENTITIES') . 'ん';
09058942011/09/24(土) 07:56:58.91ID:b87ynDOu
>>896、899
ありがとうございます、できました。
0906nobodyさん2011/09/24(土) 10:38:15.22ID:???
>>903
html_entity_decode
0907nobodyさん2011/09/24(土) 18:12:37.99ID:???
今はSPLって標準で入っているものと見なしていいんかな。
皆さんのご意見を聞かせてくだせい。
0908nobodyさん2011/09/24(土) 18:37:47.26ID:???
PHP5が標準になってるとみなしていいか、と聞くわけにはいかなかった理由が知りたい
0909nobodyさん2011/09/24(土) 18:46:57.66ID:???
今はよくわからないのですが、5が出た頃はコンパイルオプションでわざわざSPLを外している人が自分の周りにはよく居たので。
0910nobodyさん2011/09/24(土) 18:50:45.30ID:???
どんな集団だよ
0911nobodyさん2011/09/24(土) 22:42:19.26ID:???
集団ではなく、自分の周りによく居ました。
09128772011/09/24(土) 22:57:34.10ID:k/GpB/4m
>>882 >>883
ありがとうございます。参考になりました。
とりあえず以下のようなコードでやりたいことは実現できることが分かりました。
(スマートな方法では無いんでしょうけど///)
何かもっといい方法がありましたらアドバイスお待ちしてます。

$str="60*60*24";
$func="function test(){return ". $str .";}";
eval($func);
echo (test());
0913nobodyさん2011/09/24(土) 23:25:38.62ID:???
>>912
eval使うなら外部から任意のコードを実行されないようにセキュリティに気をつけて。
事前に$strを調べて数式に利用される文字以外を許容しないようにするとか。
0914nobodyさん2011/09/25(日) 00:56:33.14ID:???
$str='60*60*24';
echo eval('return ' . $str . ';');
0915nobodyさん2011/09/25(日) 04:30:21.43ID:???
>>909
それを踏まえたうえで、入っているものとみなしていいかという質問をしたのであれば、
入っているとみなしてはいけないと答えるしかないが。

クライアントOSがWindows7の場合、IEは入っているとみなしていいか?という質問に置き換えられると思う。
0916nobodyさん2011/09/25(日) 05:12:01.74ID:???
わかりました。つまり、Firefoxは入っているとみなしていいわけですね。
0917nobodyさん2011/09/25(日) 10:26:18.17ID:???
>>914
実際のコードで固定値にしてるとは限らないだろ。
0918nobodyさん2011/09/25(日) 13:14:32.62ID:???
>>917
固定値にしていないとも限らんぞ。
0919nobodyさん2011/09/25(日) 15:00:39.77ID:???
>>918
固定値にしていないとも限らんこともないだろ。
0920nobodyさん2011/09/25(日) 15:32:07.94ID:???
>>919
チャウチャウちゃうんちゃう?
0921nobodyさん2011/09/25(日) 15:39:52.56ID:???
>>920
ちゃいまんがなでんがなでっしゃろ
0922nobodyさん2011/09/25(日) 17:47:45.82ID:lSLAMoo3
phpでのmemcached(ver.1.4.5)の使い方について知りたいんですが

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("接続できませんでした");
$memcache->set('key', date('Y-m-d h:m:s'), false, 1000) or die ("データをサーバに保存できませんでした");
$rs = $memcache->get('key');
//検証
var_dump($rs);

という形で動作チェックしてるんですが、$rsの値がブラウザリロードする度に変わります
1000秒間同じ値が維持されるはずですよね?
どこかに間違いやチェックすべき点があれば教えてください
よろしくお願いします
0923nobodyさん2011/09/25(日) 17:53:38.39ID:???
よろしくお願いされました
0924nobodyさん2011/09/25(日) 18:21:08.36ID:???
毎回セットしてるからじゃね?
2回目は「$memcache->set('key', date('Y-m-d h:m:s'), false, 1000)」の部分を削って見てみれ

memcacheは知らんが、普通この種のAPIには、値がセットされているか?を調べるメソッドがあるはずだからそれ使えばよろし
0925nobodyさん2011/09/25(日) 18:25:24.62ID:LQyKU57v
checkdateで正しい日付なのですがfalseになります。
これって何が原因でしょうか?
0926nobodyさん2011/09/25(日) 20:02:04.88ID:???
setでfalseになる件は分からないけど、ほしい動作はaddじゃないのかな。
それと、flagsにfalseを指定している由来はどこから
0927nobodyさん2011/09/25(日) 20:02:49.40ID:???
>>925
お前の頭って言って欲しいってこと?
09289262011/09/25(日) 20:06:51.00ID:???
ああ、>>922=>>925なのかとおもってたごめん
>>922
setで
09299262011/09/25(日) 20:08:29.75ID:???
…orz

>>922
setでfalseに云々はスルーしてください

>>926
よくわからないけど、引数の順番を間違えたとか、全角の数字文字列を渡したとか。
0930nobodyさん2011/09/25(日) 20:53:54.15ID:UUy9A1AC
>>913
おっしゃる通りです。で、対策を考えたのですが、「文字列に$記号、括弧が出たら削除する」というのでどうでしょうか?
>>914
参考になります。使わせていただきます
0931nobodyさん2011/09/25(日) 20:57:22.77ID:???
>>930
いやいや、linuxコマンドとか実行されたらどうすんのよ。
数字と数学記号以外が含まれてたら無効にしないとやばいでしょ。
数式だけだったら括弧が含まれてても大丈夫だろ。
0932nobodyさん2011/09/25(日) 20:58:22.97ID:???
shellに受け渡す変数用のescapeファンクションとかなかったっけ?
マヌアルのevalとかsystemとか書いてるセクション一通り読んでおくといいよ
0933nobodyさん2011/09/25(日) 21:04:06.20ID:???
linuxコマンドだけじゃなく、PHPの任意のコードが実行されてもマズいでしょ
0934nobodyさん2011/09/25(日) 21:14:20.93ID:???
というかその程度の事を態々PHPでやらないとだめな事なのか?と思ってしまう
0935nobodyさん2011/09/25(日) 21:19:33.92ID:UUy9A1AC
了解です。以下のコードではどうでしょう
$str="60*60*24 phpinfo()";
$str=mb_ereg_replace("[^0-9*+-/%]","",$str);
echo eval("return $str ;");// 86400 が返る
0936nobodyさん2011/09/25(日) 22:02:52.41ID:???
いいんじゃね?eregよりpregを使うべきだがこの際どっちでもいいだろ
0937nobodyさん2011/09/25(日) 22:57:10.01ID:???
括弧を使った数式は計算しないの?
数学関数が使われていたら?
レス数が900を超えています。1000を超えると表示できなくなるよ。