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

【PHP】下らねぇ質問はここに書き込みやがれpart16

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/02/05(日) 22:35:34ID:sf8bx52D
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/

過去スレは>>2
0402nobodyさん2006/02/14(火) 22:43:05ID:???
そういや%5Bの問題はどうなったんだ?
0403nobodyさん2006/02/14(火) 22:50:35ID:???
>>401
mbstring無しでマルチバイト対応の正規表現ってできるん?
0404nobodyさん2006/02/14(火) 22:59:12ID:???
>>403
使用する文字コードを特定すればできるよ。
mbstringみたいに設定でどれでも自動切換えみたいのはさすがにしんどい。
0405nobodyさん2006/02/14(火) 23:04:33ID:???
あー、もしかして地道に日本語文字をひたすら入力するの?
%x8Cとか
0406nobodyさん2006/02/14(火) 23:18:59ID:???
何をマッチングさせようとしてるんだ?そりゃ
0407nobodyさん2006/02/14(火) 23:20:50ID:???
例えば
/hoge/fuga/hunnu/2test
のような文章から
/hoge/fuga/hunnu(最後の/〜を抜いたもの)
hunnu(最後の/〜の直前の文字列)
2test(最後の/以降の文字列)
を一度に正規表現で抜き出したいのですが、どのようなコーディングをすればいいでしょうか?
"^(/?([a-zA-Z%])*)*([a-zA-Z%]*)"
として挫折しました。
直前に書いた"/^((\/[a-zA-Z]*))*$/"のが抽出率はいいようですが。
よろしくお願いします。
0408nobodyさん2006/02/14(火) 23:26:27ID:???
>>407
basename
dirname
pathinfo
関数じゃだめなの?
0409nobodyさん2006/02/14(火) 23:27:00ID:???
/hoge/fuga/hunnu/2testという文字列があるとして
・/2testを抜いたもの
・/2testの直前にある文字列
・2testのみ
を抽出したいという事です。

とても分かりづらく書いてすみません。
0410nobodyさん2006/02/14(火) 23:37:42ID:???
>>407
$str = "/hoge/fuga/hunnu/2test";
preg_match('<.*/([^/]+)/([^/]+)$>', $str, $match);
$str1 = $match[2];
$str2 = $match[1];
04114102006/02/14(火) 23:40:32ID:???
1つ目の抜き出しを忘れた
preg_match('<^(.*/([^/]+))/([^/]+)$>', $str, $match);
$str1 = $match[1];
$str2 = $match[2];
$str3 = $match[3];
0412nobodyさん2006/02/14(火) 23:49:28ID:???
>>408
ありがとうございます。
dirnameだとファイル名を含まないパスを返してくるので意図した内容にはならず、
ただこちらの存在を忘れていました。

>>411
神を見た。
いや、何度読んでも仕組みが分からない。
でも期待したものが返って来ます。
凄いです。なぞです。
いわゆるゴッドです。
0413nobodyさん2006/02/14(火) 23:55:57ID:???
書いてなかった私の責任ですが
/2testのみだと返って来ないみたいです。
0414nobodyさん2006/02/15(水) 00:01:49ID:???
preg_match('<^(.*/([^/]+))*/([^/]+)$>', $str, $match);
で/2testのようなものも回収できるようになりました。
<や>が全然分かりませんが、動くので>4100氏に感動してしまいます。
0415nobodyさん2006/02/15(水) 00:17:35ID:???
もういい加減ウザいかも知れませんが、改良できたので一応書いておきます。
/hoge/fuga/hunnu/
だと取得できなかったのですが、
'<^(.*/?([^/]+))*/([^/]+)?$>'
とする事で取得する事ができました。

>410氏ありがとうございました。
0416nobodyさん2006/02/15(水) 01:16:25ID:???
>>414
あー。<や>には大して意味ないよ。
普通、pregの正規表現は /〜/ って書くものだけど、
|〜| とか [〜] とかでも書けるってだけの話。
パス分解の正規表現を書くときは中身に / を多用するから
エスケープ面倒くさいんで別の記号で代用してるだけ。
0417nobodyさん2006/02/15(水) 02:51:07ID:NFe11LPg
PHP4で吐き出したデータをpdf化するにはどんな方法がありますか?
0418nobodyさん2006/02/15(水) 08:35:38ID:???
>>417
Excelで読み込んでAcrobat
0419nobodyさん2006/02/15(水) 08:37:21ID:???
>>417
wordに貼り付けてPDFメーカー
0420nobodyさん2006/02/15(水) 08:41:46ID:???
>>417
ブラウザからPDFプリント
0421nobodyさん2006/02/15(水) 09:04:35ID:???
>>417
PDFLIBだっけかなんか無料のやつ使ったことあるな。
0422nobodyさん2006/02/15(水) 09:11:12ID:???
>>421
吐き出したデータをまたPHPで読むの?
0423nobodyさん2006/02/15(水) 09:37:50ID:???
空気嫁
0424nobodyさん2006/02/15(水) 09:56:08ID:???
正規表現で括弧を入れ子にできるんだ.知らんかった.
その場合matchesに入るテキストはどういう順番になるの?
0425nobodyさん2006/02/15(水) 10:01:21ID:???
(1(2))(3)の順番だよ
0426nobodyさん2006/02/15(水) 10:24:46ID:???
括弧の最初の登場順と覚えればヨロシ。
0427nobodyさん2006/02/15(水) 11:04:03ID:???
>>421
PDFファイルとして吐き出す
0428nobodyさん2006/02/15(水) 11:13:07ID:???
>>374
"."でsplitするとかってダサい方法もあるけどね
0429nobodyさん2006/02/15(水) 12:06:02ID:???
メールのヘッダで
Date:
Two, 14 Feb 2006 8:38:50 -0480
という素晴らしいヘッダを送ってくるスパムがあるんですが、postgresにdateとして登録すると日付ではないと怒られます。

phpでも同じような正しい日付ではないと判断する関数は無いでしょうか?
0430nobodyさん2006/02/15(水) 12:37:40ID:???
>>429
strtotime():
0431nobodyさん2006/02/15(水) 13:06:54ID:???
ファイルをブラウザでアップロードするプログラムを書いているのですが、
ファイルの更新日時を取得するにはどうしたらよいのでしょうか
0432nobodyさん2006/02/15(水) 13:09:36ID:???
>>430
ありがとうございます、出来ました
下記のようにおかしな日付表現だと"-1"が帰ってきました。
----------------------------------------
$time = 'Two, 14 Feb 2006 8:38:50 -0480';
//$time = 'Wed, 15 Feb 2006 11:49:43 +0900';
$stime = strtotime($time);
print $stime . "<br>";
print date("(Y-m-d h:i:s)",$stime);
----------------------------------------

関数名が分かってマニュアル見てみるとそのまんまエラーの処理があって便利
http://php.s3.to/man/function.strtotime.html
0433nobodyさん2006/02/15(水) 13:20:22ID:???
>>431
stat
filemtime

別に宣伝じゃないけど
PHP5逆引き大全 500の極意
とかの逆引き出来る本買うと相当便利よ

phpのマニュアルは日本語検索する方法が分からないのよね・・
0434nobodyさん2006/02/15(水) 14:04:41ID:p2BDIAFN
niftyってphp設置できますよね?
0435nobodyさん2006/02/15(水) 14:05:12ID:???
>>433
日本語がダメなら英語で検索すればいいんじゃね?
0436nobodyさん2006/02/15(水) 14:43:57ID:???
>>435
まずは日本語のphpマニュアルが検索したいナリ
英語のマニュアル読むのは時間がかかるナリ
0437nobodyさん2006/02/15(水) 14:47:56ID:???
マリーアントワネットキター
0438nobodyさん2006/02/15(水) 14:48:31ID:???
>>432
PHP5.1.0からは-1じゃなくてfalseを返すようになってるので注意
04394312006/02/15(水) 15:08:53ID:???
>>433
やってみたのですが、どうもうまくいきません。アップロードした時刻が表示されてしまいます。
ポイントだけでもかまわないので、何かサンプルを示していただけないでしょうか?
0440nobodyさん2006/02/15(水) 15:31:24ID:???
>>439
元のローカルにあるファイルの情報を取得しようってか?
そりゃ、PHPだけじゃ無理だ
0441nobodyさん2006/02/15(水) 15:35:03ID:???
あの質問じゃあ、送信元の時刻のことだったなんてわからないよなw
0442nobodyさん2006/02/15(水) 15:35:27ID:???
>>439
clearstatcache
してないって落ちじゃなくて?
0443nobodyさん2006/02/15(水) 15:41:12ID:???
>>438
ありがとうございます、気をつけます
現在はphp4なので、またphp5に移ってDB登録の際にエラーが出たら考えます。

>>431
アップロードしてからの更新時刻についてだったら

clearstatcache();
print_r(stat('./dummy.txt'));

で出来てるようだけど
0444nobodyさん2006/02/15(水) 18:08:58ID:???
>>436
俺は日本語HTML版のマニュアルをダウンロードして、
なまずに食わせてるよ。
スゲー便利。
0445nobodyさん2006/02/15(水) 18:22:47ID:NFe11LPg
>>427
そうです。そのPDFとして吐き出すという処理を自動でさせたいのです。
ID・PASSなどでログインした会員ページで、例えば自分の登録状況をPDFとして出すとか。
0446nobodyさん2006/02/15(水) 18:32:04ID:???
>>445
PDFLIBはしらべたのかい?
0447nobodyさん2006/02/15(水) 20:43:29ID:???
php pdf ライブラリ でググればいろいろ引っ掛かるんじゃないかな。
上に出てきてないやつだと fpdfとかもあるな。
0448nobodyさん2006/02/15(水) 21:12:05ID:HBKFx6cq
php5.xの最新版をzipをダウンロードしてきたんですが、
sqliteは入っているのでしょうか?どこにもないんです。
phpinfoもみましたがそれらしき文字も見当たりません。
なにかインストールする作業が必要なんでしょうか?
どなたかご教授おねがいします。
0449nobodyさん2006/02/15(水) 21:36:07ID:???
いりません。
sqlite_open()すればインストールされているかどうか分かる
0450nobodyさん2006/02/15(水) 22:19:37ID:???
>>448
Win版しか知らないが、最新版なら作業が必要。
5.1から標準ではなくなった。ライブラリ化されたっぽい。
php.iniの適切な位置に
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
の3行を順番に記述するがよろし。
Linux版とかでも何らかの作業が必要と思われ。
0451nobodyさん2006/02/15(水) 23:48:30ID:yhYCj6u7
そうだっけ?
04524502006/02/16(木) 00:08:24ID:???
んー、Linux版とか扱わないので確証はないけど、
Win版で非標準(デフォで組み込まれていない)になって、Linux版で標準のままだったら不公平かとw
Win版に関しては間違いなく5.1.0ではデフォでは組み込まれなくなった。
5.0.4→5.1.0Ver.UP時にphp.iniを流用してたらSQLite動かず、原因究明にえらい苦労した。
0453nobodyさんNGNG
ファイルのロック解除とか
クローズに失敗した場合
どう対処したらいいですか?
というかどういう状況になると
失敗するんですか?
0454nobodyさん2006/02/16(木) 01:07:23ID:???
多分OSが勝手にクローズしてくれると思うよ。
0455nobodyさん2006/02/16(木) 01:10:32ID:???
ロック解除の方は分からないけど
0456nobodyさん2006/02/16(木) 01:21:31ID:???
>>455
ロックも
0457nobodyさん2006/02/16(木) 01:21:37ID:???
>>455
そんなことじゃ、立派な泥棒さんにはなれないZO!
0458nobodyさんNGNG
へーそうなんですか。
じゃあスクリプトからしかアクセスしないような
ログファイルとかだったら
失敗してもそのまま終了してしまって問題ないですよね。
0459nobodyさん2006/02/16(木) 01:53:31ID:???
何だその揚げ足取るような口調は。
質問じゃないのか。
0460nobodyさん2006/02/16(木) 01:57:27ID:???
>>458
いいんじゃない?
貧弱なOSじゃなかったらスクリプト(PHPプログラム)が終了すると同時にファイルもクローズしてくれるだろうし。
0461nobodyさん2006/02/16(木) 02:06:41ID:???
くそぉ・・・またPerlの開発だよ・・・
もうPerl忘れちゃったよ('A`)
いや、そんなにPHPとは変わんないけどさ、気分の問題だよ
0462nobodyさん2006/02/16(木) 02:26:03ID:U/SzwaHV
>>450さんありがとうございます。あした会社でSQLiteを導入してみます。
データベースがはじめてなのに土曜日までに会員登録をつくらなあかんのです。
助かりました。ありがとうございます。
04634582006/02/16(木) 02:28:49ID:???
>>459
いやそんなつもりじゃなかったんです。
変な書き方してすみませんでした^^;

皆さんどうもありがとうございました。
0464nobodyさん2006/02/16(木) 02:53:13ID:???
>>461
Perl→PHPってあんまり難しくないけど
PHP→Perlって記号とか色々忘れてて結構きついよな
0465nobodyさん2006/02/16(木) 04:19:25ID:???
ちょっと疑問に思ったので・・・

xreaを使ってるんですが、
拡張子をphpにしてるにも関わらずhtmlとして扱われてしまいます。
もともとはMovable Typeのtmplという拡張子のファイルを、
PHPでカスタマイズしたものなのですが、
Movable Type側で、このファイルをhtmlとして扱うような
処理がしてあると考えるのが妥当でしょうか?
Perlはわからないのでサッパリです・・・

当然、ファイルは拡張子をかえたので、
そのファイルを使っているものに関しては、
拡張子の関連付けを変えました。
0466nobodyさん2006/02/16(木) 04:46:54ID:???
>>465
日本語でおk
0467nobodyさん2006/02/16(木) 05:10:39ID:???
function next(& $time)

↑の「&」ってどういう意味をなすんでしょうか?
くだらないかもですが、宜しくお願いします。
0468nobodyさん2006/02/16(木) 05:56:15ID:???
>>467
& $variable;みたいに&と$の間にスペース入れられるのかな。

ちなみにそれは参照渡しと呼んぶ。
$src = 100;
echo "$src\n";
hoge ($src);
echo "$src\n";
function hoge (&$src){$src=0}
----出力----
100
0
----終了----
となる。
詳しくは関数の引数を読んでくれ
ttp://www.php.net/manual/ja/functions.arguments.php
0469nobodyさん2006/02/16(木) 07:50:00ID:???
phpMyAdminでzip圧縮してエクスポートという機能がありますが、
PHPでzip圧縮なんて出来るんですか?
0470nobodyさん2006/02/16(木) 08:18:10ID:???
>>469
zlibを組み込んであれば、zipとgzipが扱える。
0471nobodyさん2006/02/16(木) 08:22:36ID:???
>>469
PHP自体はZIP読み込みしかできないが
PHPからUNIXのZIPコマンドを走らせれば一応できると思う
0472nobodyさん2006/02/16(木) 09:52:32ID:???
>>468
遅くなりましたがありがとうございました。
04734702006/02/16(木) 09:53:03ID:???
471さんの書き込みを見て説明不足かなと思ったので追記しときます。
PHP自体ではZIP読み込み関数しか用意されてないが、
phpMyAdminの話でいうとPHPからzlibを利用できる環境で
zipとgzipの出力ができる。詳しくはzip.lib.php参照
(PEARのArchive_Zipクラスみたいなもん)
0474nobodyさん2006/02/16(木) 13:18:39ID:???
if(isset($r)){echo"$r";}
$rにNULLを入れると、NULLと表示されてしまいます。
これって正しいですか?
0475nobodyさん2006/02/16(木) 14:18:09ID:???
>>474

"NULL"だったらぶっ殺す
04764742006/02/16(木) 15:05:23ID:???
>>475
formタグのvalue='NULL'で渡しているんですが、もしかしてこれって文字列になるんですか?
''としてもifの中を通ってしまいます。
ちなみに明らかに使っていないグローバル変数でif(isset())をしたら中を通ってしまったので、
ためしにNULLを渡してみたらやっぱりifの中を通ってしまいます。
さらにちなみにif(isset())は多用していて、機能する所と機能しない所があります。
なにが違うのかさっぱり分かりません。
どうかご教授下さい。
0477nobodyさん2006/02/16(木) 15:12:53ID:???
APACHEど素人、PHP駆け出しです。
APACHEを勉強しようと思い、マイPC(windows)にAPACHEをインストールし、
PHPを動作させました。
ところが、日本語の$_GET値が、勝手にURLデコードされてしまいます。

例えば、次のようなPHPファイルがあり、
test.php
<?php
print $_GET[key];
?>

以下のようにアクセスすると、
test.php?key=%A4%A2%A4%A2%A4%A2

実行結果
-----------------
あああ
-----------------
と表示されます。

正しくは、
-----------------
%A4%A2%A4%A2%A4%A2
-----------------

かと思うのですが、何が原因でしょうか。
お時間がある方教えていただけると助かりますm(__)m



0478nobodyさん2006/02/16(木) 15:13:32ID:???
こういう人にはC言語をやらせたいと思う俺C厨?
0479nobodyさん2006/02/16(木) 15:19:16ID:???
>>478の対象は>>476な、>>477もCやらせたいけどまた別。

>>476
$a = "NULL";
$b = "NULL";
$C = NULL;
echo "a = $a, b = $b, c = $c";
を実行してみて感想が欲しい。
ちなみにマニュアルでは、
引用符、二重引用符
ttp://www.php.net/manual/ja/language.types.string.php
NULL
ttp://www.php.net/manual/ja/language.types.null.php
に書いてあるから。
それでも分からなかったらまた質問しれい。
0480nobodyさん2006/02/16(木) 15:22:43ID:???
>>477
http://www.studyinghttp.net/uri
ここのパーセントエンコーディングを読んでみて
0481nobodyさん2006/02/16(木) 15:25:17ID:???
>>476
つかhtmlのformで渡せるのは"文字列"だけだよ。
文字列を受け取って、それをどう解釈するかは受信側に任されてるが。
04824742006/02/16(木) 16:01:57ID:???
a = NULL, b = NULL, c =
実行結果です。
引用符、二重引用符については一様分かっているつもりなのですが、
postで渡したNULLがどうしてもif(isset())を通ってしまいます。
value=NULL
value="NULL"
value='NULL'
$_POST[r]
$_POST['r']
$_POST["r"]
いずれもif(isset())を通ってしまいました。
仕方ないのでNULLの代わりに0を渡して、
if($_POST[r] != 0)としました。
if(isset())は他でも使っているので気持ちが悪いッス。
0483nobodyさん2006/02/16(木) 16:05:07ID:???
>>482
>>481
0484nobodyさん2006/02/16(木) 16:08:11ID:???
>>476
フォームでNULLを渡してissetで判定、ってのは基本的には無理。
やるなら
if($r == 'NULL') unset($r);
とかやって変数を消すしかない。

> 明らかに使っていないグローバル変数
これでisset()を通るのは意味不明。どっかで $r = ''; とかしてるんじゃないの?
isset()で偽になるのは unset($r); で変数自体を消す場合と $r = NULL; とプログラム中で書いたとき。
0485nobodyさん2006/02/16(木) 16:09:23ID:???
>>482
POSTで渡したデータ = "NULL"または’NULL'と同義でNULLとは別。
0486nobodyさん2006/02/16(木) 16:11:33ID:???
>>482
通常、フォームに対するissetは「そのフォーム自体が存在しない場合」をチェックするのに使う。
なので、<input type="hidden" name="a" value="">とやった時点でもうissetは必ず真。

普通は<input type="submit" name="a" value="aを押したときの処理">みたいにsubmitで使って
どのボタンが押されたかの判別に使う程度。値の内容判別にissetを使うのは間違い。
04874742006/02/16(木) 16:14:33ID:???
>>481
ぬあ、そうなんですか、ってそうなんですね。
ありがとうございます。

ところで、formタグに囲まれている input type='file' は、
参照されなくても$_FILESに値が入ってしまうんでしょうか?
参照されていないのにif(isset($_FILES))でifの中を通ってしまいます。
0488nobodyさん2006/02/16(木) 16:18:28ID:???
482を読む限り、文字列とbooleanとNULL型とかの
基本的な「型」の区別すら付けられていない気が・・・・
(481を読む前に482を投稿したとしても)
0489nobodyさん2006/02/16(木) 16:24:27ID:???
>>487
print_r($_FILES)してみれ
出てきた変数は総てissetで真となる
04904742006/02/16(木) 16:34:56ID:???
みなさん、ありがとうございます。
昨日は動いてた気がしたんですよ、夢でも見てたんですね。
勉強し直して来ます。
0491nobodyさん2006/02/16(木) 16:36:06ID:???
オマイラさん
ttp://www.gac.jp/article/index.php?stats=question&category=&id=17033&command=msg&page=all
こっちでも優しくしてやってくれよ…マイッタ
0492nobodyさん2006/02/16(木) 16:46:47ID:???
ちょとPHPからずれるかもしれませんが
例えばある表のパラメータとかを入れるレコードを作るとして
2回目から入れる場合
主キー=aとか調べてあればupdateなければinsertっていうのより
一旦レコード全部削除してinsertばっかってやってるのですが
何かまずいことありますか?
調べる処理分時間も短縮されるのでと思っているのですが・・・
0493nobodyさん2006/02/16(木) 16:51:48ID:???
>>491
PHP関係ない
0494nobodyさん2006/02/16(木) 16:51:55ID:???
PHPじゃないじゃんデータベースじゃん
全然ちょっとじゃないよっヽ(`Д´)ノ
0495nobodyさん2006/02/16(木) 16:53:32ID:???
>>492
すごい遅い
0496nobodyさん2006/02/16(木) 16:55:47ID:???
>>492
DBにもよるが、基本的に遅くなる。
詳しく知りたいならDB板行ってくれ
0497nobodyさん2006/02/16(木) 17:01:14ID:???
PHPとは関係ないかも知れませんが、
基本的にどの言語にもある変数や配列といった概念は昔からあるのですか?
0498nobodyさん2006/02/16(木) 17:09:10ID:???
コペルニクスの時代から
04994772006/02/16(木) 17:10:43ID:???
>>480
ありがとうございました。

PHPって勝手にデコードされるのが仕様だったんでしたね。
perlと行ったり来たりの開発でテンパッてました。
0500nobodyさん2006/02/16(木) 17:14:16ID:???
>>495-496
遅くなるのですか・・。
以外ですね。ありがとうございました。
0501nobodyさん2006/02/16(木) 17:37:27ID:???
>>500
消す範囲によるんじゃね?
インデックスの状態に寄るだろうし、
トランザクションではさめばいい場合もあるし
■ このスレッドは過去ログ倉庫に格納されています