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

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

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

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

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

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0624nobodyさん2010/06/22(火) 10:21:03ID:???
改良して対応してくれって言うけど、その分の人件費はどうなるの?
なんでもWebだったらタダでやってくれると思ってないか?
0625nobodyさん2010/06/22(火) 10:41:41ID:???
Friendクラスも使えないしPHPダメでしょ。
まぁ使うけど。

5.3で静的遅延束縛が実装されて大分使いやすくなった。
0626nobodyさん2010/06/22(火) 12:37:56ID:???
C++のfriendキーワードの事か?
今頃取り入れたらそれこそPHPらしいって言われるな
0627nobodyさん2010/06/22(火) 18:42:11ID:ZnYDyWrv
ファイル読み込み処理ですけど
テキストデータの場合
fgets()を利用してループさせる。
file_get_contents()もしくはfile()でいっきに読み込む

どっちの方が効率がいい処理になるのでしょうか?
みなさんは何を基準にしてどの関数を利用するようにしていますか?
0628nobodyさん2010/06/22(火) 18:48:40ID:???
メモリに全部乗っかっちゃって大丈夫なら全部読んじゃうかも
0629nobodyさん2010/06/22(火) 18:49:19ID:???
内容次第だけど全部一気に読むとメモリ食うので一行ずつですむなら
そうする。
0630nobodyさん2010/06/22(火) 18:56:16ID:???
配列にデータいれる速度 
タブや改行区切りで済むなら一気読みでexplodeが最速。


一回目と二回目

file
10.944231987  14.324997901917

serialize
15.630096912384  10.502514839172

var_export
16.92795419693  13.347457885742

explode
1.0216579437256  1.743134021759
06316302010/06/22(火) 18:58:18ID:???
どれも一気読みで、一行読みとは比較していないが一気読み速いことはないだろう。
0632nobodyさん2010/06/22(火) 21:08:21ID:???
配列チェックでisset って使わなかったけど。isset ( $A[$n] )としたときに
勝手に$A[$n] =NULLがセットされる気がしてたから。
存在しない配列・変数は自動生成するもんだとおもってた。
しかし、今日気づいた。増えてなかった。
0633nobodyさん2010/06/22(火) 21:55:14ID:???
>>584
亀レスだけど縦書き試してみた。

<?php
$im=imagecreatefrompng('sample.png');
$bgcolor=imagecolorallocate($im,255,255,255);
$im=imagerotate($im,90,$bgcolor); //左90度回転
$black=imagecolorallocate($im,0,0,0);
$font='vSHGM.ttf'; //縦書き専用フォント
$size=22; $x=50; $y=50;
$text='「馬〜鹿、アホー」って書いてみるテスト。';
imagettftext($im,$size,0,$x,$y,$black,$font,$text);
$im=imagerotate($im,-90,$bgcolor); //右90度回転
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>

ImageTTFTextのAngleを-90にするとガタガタになるんで、
元の図形を回転させてみた。
いちおう句読点や長音、ニョロ、小さい「っ」の位置は正しく表示される。
でも、もともとのフォントの形が…残念…
0634nobodyさん2010/06/22(火) 22:09:05ID:???
あ、縦書き専用フォントを使うのか。元をちゃんと読んでなかったorz
0635nobodyさん2010/06/22(火) 23:33:08ID:???
>>627
効率って、
同じようなことするのにソースコードの行数が少なくて済む効率?
実行時間の効率?
使用メモリの効率?
0636nobodyさん2010/06/23(水) 00:03:36ID:???
すべて
0637nobodyさん2010/06/23(水) 03:08:02ID:???
ならループさせない方が効率いい
0638nobodyさん2010/06/23(水) 23:12:08ID:SXPCexzA
PHPを使ってファイルAをアップロードするとき、アップ途中でtmpフォルダにあるAを特定することって可能ですか?

・tmpファイル名から判断→できないですよね?頭にphpやsess_など特定の語がつくらしいことは分かったのですが・・・
・フォルダを監視し、アップロード開始前後に増えたファイルをAとみなす。→同時期に関係ないファイルが増えることもあるので微妙

0639nobodyさん2010/06/24(木) 01:13:30ID:???
$_FILES["hoge"]["tmp_name"] ではだめなの?
リクエストを受け取って動くコードじゃなしに、別で動いてるディレクトリ監視用のなんかで、
受信が終わってリクエストされたPHPのファイルのなかみが実行される前に
アップロードされ一時保存されてるファイルにちょっかい出したいとか、そういう感じ?
0640nobodyさん2010/06/24(木) 01:19:10ID:???
リクエスト受信中はApacheがロックしてるだろ
そもそもバッファに収まるサイズなら一時ファイル作らないだろうし
0641nobodyさん2010/06/24(木) 02:29:20ID:OBMIoFMZ
>>639
そんな感じです。
0642nobodyさん2010/06/24(木) 06:36:59ID:WgZlfAT4
朝から失礼します。

PHPにて、以下のコードが意図したように動作しません。

$funcs = array(func_a, func_b, func_c);
foreach ($funcs as $func){
$func(); //$func === String... "func_a", "func_b", "func_c"
}

どうも調べてみると PHP の配列では、関数への参照が期待されるところが、文字列として解釈されてしまうみたいです。

どのようにすればこの問題を回避できるのでしょうか?
アドバイスよろしくお願いします。
06436422010/06/24(木) 06:46:36ID:WgZlfAT4
すみません、訂正します。

x この問題を回避
x この問題を解決
0644nobodyさん2010/06/24(木) 07:45:38ID:???
>>642
よく分からんけど

>php -r "$funcs = array('func_a', 'func_b', 'func_c'); foreach($funcs as $func) $func();

Fatal error: Call to undefined function func_a() in Command line code on line 1
06456422010/06/24(木) 07:57:50ID:WgZlfAT4
>>644
すみません、どうやらこちらの勘違いだったみたいです。

> var_dump($funcs)

array(3) { [0]=> string(4) "func_a" [1]=> string(4) "func_b" [2]=> string(4) "func_c" }

上記をまんまに受け取ってしまって、文字列が格納されていると判断していました。
しかし、先ほど確認してみると実際には関数への参照が格納されていることを確認できました;

どうもありがとうございました。
0646nobodyさん2010/06/24(木) 08:34:42ID:???
連想配列を、ループで順に数字でアクセス出来ますか。
たとえば、$n=10に対して、10個目に格納されているキーと値を取得できますか。
0647nobodyさん2010/06/24(木) 08:37:30ID:MnfGX6AS
訂正。
ループでなくて、ランダムアクセスする方法ありますか。
こういうやつでなくコストが低いやつが良いです。

$n=10;
$cnt=0; foeeach ( $A as $key->$val ) { if($cnt==$n) break; $cnt++; }
0648nobodyさん2010/06/24(木) 08:43:48ID:WgZlfAT4
>>647
array_rand じゃだめなの?
06496472010/06/24(木) 08:48:10ID:MnfGX6AS
$n番目のキーと値を取得したいのですが。
ランダムアクセス = シーケンシャルサーチ(>>647)をしないアクセスってことです。
0650nobodyさん2010/06/24(木) 09:35:17ID:???
array_keysかなぁ・・・
配列の配列にすべきと思うけど。
0651nobodyさん2010/06/24(木) 09:48:42ID:???
array_sliceでキーを保持したまま1対取り出せばいいんじゃないかな。
0652nobodyさん2010/06/24(木) 12:10:57ID:MnfGX6AS
サンクス
0653nobodyさん2010/06/24(木) 13:05:35ID:???
>>645
未定義の定数 func_a は文字列 "func_a" と等価に扱われているだけ
関数はファーストクラスオブジェクトじゃないのから
識別子となる文字列で間接的に扱うしかない
http://php.net/manual/ja/functions.variable-functions.php
0654nobodyさん2010/06/24(木) 16:04:42ID:sfa066RH
プログラム板の略称はム板ですが
ここの略称の略称はなんでしょうか?
0655nobodyさん2010/06/24(木) 16:34:14ID:???
ペ板
0656nobodyさん2010/06/24(木) 17:26:06ID:???
P板
0657nobodyさん2010/06/24(木) 17:31:46ID:???
WEP板
0658nobodyさん2010/06/24(木) 23:37:31ID:???
WindowsでPHP最新版をC++に変換するツールがほしいです。
HipHop PHPをwindowsに対応してほしいです。
0659nobodyさん2010/06/25(金) 02:25:39ID:???
HipHop PHPってこのスレで開発してたんだっけ?
0660nobodyさん2010/06/25(金) 07:58:18ID:???
独り言でしょ?
0661nobodyさん2010/06/25(金) 10:36:18ID:beZDHavc
phpのfopenで作成したファイルが、更新も削除も出来なくなりました。
FTPソフトからもphpからも操作不可能です。
どんなアクセスも可能なファイルはどのように作成すればいいですか?
0662nobodyさん2010/06/25(金) 10:37:35ID:beZDHavc
fopenしつつ、パーミッションを777にしたいということなんですが。
オプションでは付いてないんですが。
あとから変更すると既に変更不可になってそうです。
0663nobodyさん2010/06/25(金) 11:31:43ID:???
phpでchmodしてください
0664nobodyさん2010/06/25(金) 11:33:14ID:beZDHavc
10進で777を書き込んで
パーミッションが411になってしまったんだと思うんですが。
これって削除も更新も出来ないんですが。
FTPソフトから。
これにアクセスする方法はないんですか?
0665nobodyさん2010/06/25(金) 11:34:25ID:beZDHavc
>>663
サンクス。 phpから親ディレクトリのパーミッション変更してみます。
0666nobodyさん2010/06/25(金) 11:35:07ID:???
PHPでchmodを 777 じゃなくて 0777としてください。
0667nobodyさん2010/06/25(金) 13:10:12ID:beZDHavc
サンクス
0668nobodyさん2010/06/25(金) 13:47:53ID:F/VYj9su
phpinfo()で出力される情報の中に、
extension_dirとinclude_pathという2つのパスがありますが
これらは何を基準に分けてるのですか?

extension_dirの中を見るとso拡張子のファイルしかないので、こちらはバイナリファイルを置けばいいのですか?

追加したいライブラリがso拡張子だったらextension_dirに突っ込んで
phpファイルだったらinclude_pathに突っ込む、という感じでいいのかな。
0669nobodyさん2010/06/25(金) 19:25:21ID:TAYX3VSM
mb_convert_encodingで文字コードを変換すると、
一部の漢字がうまく変換されずに困っています。

JIS第三水準以上になると、ほとんど駄目なようなのですが、
対処法はありますでしょうか?

よろしくお願いします。
0670nobodyさん2010/06/25(金) 20:04:08ID:beZDHavc
全文字揃うユニコードにする
0671nobodyさん2010/06/27(日) 01:38:10ID:aVrX+ivV
$text = "abcdefg";
echo $text[3];
こうやれば「d」の文字が拾えますが
$text = "あいうえお";
echo $text[3];
とやった場合マルチバイトのため文字として拾えません。
これを拾えるようにする方法は無いのでしょうか?
$text = array("あ","い","う","え","お");
これはなしの方法であくまで
$text = "あいうえお";とやった変数に格納したデータを拾う方法。
0672nobodyさん2010/06/27(日) 02:28:26ID:???
>>671
mbstringのページを見てみると幸せになれるかも
0673nobodyさん2010/06/27(日) 07:09:15ID:???
>>663
>>666
え。

>>662
umask値を変更してください。
0674nobodyさん2010/06/27(日) 07:10:24ID:???
ああ、読み間違えたね、俺。
0675nobodyさん2010/06/27(日) 12:43:50ID:aVrX+ivV
>>672
それつてmb_系(mb_substr)の関数仕えって事?
0676nobodyさん2010/06/27(日) 13:05:05ID:???
>>675
つかやってみろよ
0677nobodyさん2010/06/27(日) 14:02:58ID:???
>>675
http://jp.php.net/manual/ja/ref.mbstring.php
0678nobodyさん2010/06/27(日) 14:29:26ID:???
むしろなぜCみたく文字列を扱うのか
0679nobodyさん2010/06/27(日) 15:06:07ID:???
JavaScriptなら配列のように扱ってもちゃんと文字が取れるけど
普通は関数使うね
0680nobodyさん2010/06/27(日) 17:02:21ID:???
UTF8リテラルもなくなったしな
0681nobodyさん2010/06/27(日) 21:53:55ID:hmPoeXmO
test.datの中に以下のようにデータが格納されている場合
1,佐藤,ok,43
2,鈴木,no,65
3,田中,ok,87
4,斉藤,no,23
5,紅子,ok,90
4番目の斉藤のnoの部分をokに変えようとした場合
シェルのsedみたいに該当部分だけを書き換えることが出来る関数とかあるでしょうか?
ちなみにDBへの移行が出来ないのでfileで読み込んで斉藤にヒットした行のnoをokに変更、それ以外はそのままファイルに追記していく形で変更を行ってます。
0682nobodyさん2010/06/27(日) 22:34:28ID:???
直接的な関数はないけどfgetcsvとfputcsvとか使えば少しは負担減るかも

DBは使えないってsqliteもだめなの?
0683nobodyさん2010/06/27(日) 22:39:39ID:???
テキストはログファイル程度にしておかないと後で苦労する
06846812010/06/27(日) 22:45:42ID:hmPoeXmO
>>682
csvとして扱う関数があるわけですね。
そちらをちょっと調べてみます。
DB(sqlite含)関連が入っていない+追加出来ない状態です。これはサーバーの仕様なのであきらめてます。

>>683
私もそう思います。
でもきっとこれを作った当初は規模の拡大を予測してなかったんだと思います。
ソースを見たところ社内SEが部署内のちょっとした効率化のために作成したもののようです。
部署内でちょっとずつ機能追加してたら、他の部署からも〜みたいな感じで膨らんで今にいたるという状況みたいです。
ゼロから完全書き換えしたほうが後々いいとおもってはいますが、そこは大人の事情で出来そうにないので現状で何とかしようとしていたところです。
0685nobodyさん2010/06/28(月) 14:52:59ID:t3TKO+l1
すみません。

PEARの公式サイトからXML-RPC2のパッケージをダウンロードして解凍したら
PHPファイルじゃなくてXMLファイルでした。

何を言っているのか分からないかもしれませんが
私にも何が起こったのか分かりません。

超能力とかそういうのじゃありません。
もっと恐ろしい能力の片鱗を味わいました。

どうすればいいですか教えて下さい。
0686nobodyさん2010/06/28(月) 15:05:34ID:t3TKO+l1
解凍レンジで解凍したら出来ました。
本当にありがとうございました。
0687nobodyさん2010/06/28(月) 17:01:14ID:me2fxhSA
<a href="http://aaa.jp/aaa/"><img id="pac-A_00000" alt="暑い" src="http://aaa.jp/aaa/A_000000.jpg" ></a>

これを
<a href="http://aaa.jp/aaa/"><img src="http://aaa.jp/aaa/A_000000.jpg" ><br>暑い</a>
と置き換えたいのですがどうすればいいでしょうか?
0688nobodyさん2010/06/28(月) 17:04:09ID:???
>>687
正規表現で置換しろ。
0689nobodyさん2010/06/28(月) 17:08:50ID:me2fxhSA
ちょっと説明不足
<a href="http://aaa.jp/aaa/"><img id="pac-A_00000" alt="暑い" src="http://aaa.jp/aaa/A_000000.jpg" ></a>
<a href="http://aaa.jp/bbb/"><img id="pac-b_00001" alt="寒い" src="http://aaa.jp/aaa/A_000001.jpg" ></a>
etc・・・
これを
<a href="http://aaa.jp/aaa/"><img src="http://aaa.jp/aaa/A_000000.jpg" ><br>暑い</a>
<a href="http://aaa.jp/bbb/"><img src="http://aaa.jp/bbb/b_000001.jpg" ><br>寒い</a>

>>688
正規表現分りません><
0690nobodyさん2010/06/28(月) 17:20:11ID:???
http://oshiete.goo.ne.jp/qa/5999304.html
#1嘘つき君。
>HP作成集などに載っている素材
>どれも問題ありません。
>(本の中で素材の注意書きに、「再配布や販売を目的とする素材の2次使用、商用利用は禁止する」とあります)
の部分は完全無視。
06916902010/06/28(月) 17:21:02ID:???
間違えた。
0692nobodyさん2010/06/28(月) 17:23:52ID:???
>>689
>正規表現分りません><
調べる気がないの?
http://www.google.co.jp/search?source=ig&hl=ja&rlz=&q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE&aq=f&aqi=g10&aql=&oq=&gs_rfai=

>事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

さらに
>【その他諸注意】
>・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0693nobodyさん2010/06/28(月) 17:26:25ID:???
答え教えると別のパターンの時も聞いてくるだろ
勉強しろ
0694nobodyさん2010/06/28(月) 18:10:59ID:me2fxhSA
$var = '<a href="http://aaa.jp/aaa/"><img id="pac-A_00000" alt="暑い" src="http://aaa.jp/aaa/A_000000.jpg" ></a>';
$rcd = ereg_replace("^id=\".+\"$", "123", $var);
echo "$rcd";

とりあえず実験でこうやってみましたが駄目でした
>>693
これ以降は聞きません
今回だけです
0695nobodyさん2010/06/28(月) 18:19:01ID:???
$rcd = ereg_replace("id=\"[^\"]+\"", "123", $var);
いろいろやってみるといいよ。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
0696nobodyさん2010/06/28(月) 18:35:46ID:???
DOMでも使えば?
0697nobodyさん2010/06/28(月) 18:35:48ID:me2fxhSA
>>695
( ^ω^)おっおっおっ
良いサイトありがとう!
0698nobodyさん2010/06/28(月) 18:37:34ID:me2fxhSA
>>696
DOMとかわかんないお( ^ω^)
でもありがとう( ^ω^)
0699nobodyさん2010/06/28(月) 18:47:59ID:z0Gu2+zS
PHP5で質問です。

try{
in_array($hoge,$fuga);
}catch(Exception $e){
echo 'error';
}
としたときに
in_array関数のパラメータに誤ったデータが入ってきたら
Exceptionのキャッチが出来るかと思っていたのですが、
キャッチできませんでした。

そういうものなのでしょうか?

もしキャッチをするとしたらどの様に記述すればよろしいのでしょうか?
よろしくお願いいたします。
0700nobodyさん2010/06/28(月) 18:53:51ID:???
>>699
http://jp.php.net/manual/ja/function.in-array.php
例外なんて発生しません
0701nobodyさん2010/06/28(月) 19:48:46ID:???
>>700

ありがとうございます。
やっぱり無理なんですね。

実務では、DB操作で複数テーブルへの操作を行おうとしていて、
in_arrayでエラーが発生したら
例外をキャッチしてロールバックをしたかったのですが、
そのまま素通りしていたものですから、
なにか良い方法がないかと思案しているところでした。

0702nobodyさん2010/06/28(月) 19:58:52ID:???
>>699
誤ったデータってどんなデータ?
0703nobodyさん2010/06/28(月) 19:59:50ID:???
if (!in_array($hoge, $fuga)) throw new Exception();
すればいいのでは?
0704nobodyさん2010/06/28(月) 20:13:30ID:???
戻り値見ないの?馬鹿なの?死ぬの?
0705nobodyさん2010/06/28(月) 20:53:04ID:???
標準関数なのに例外投げないのね
07066992010/06/28(月) 20:57:18ID:???
>>702
第二引数に配列でない値がとんできたとか・・そういう類の予期し得ないデータです。

>>703
ありがとうございます。その場合PHPのエラーが発生したらfalseが
返ってくるのでしょうか。
ちょっと今試せない環境なので、試せるようになったら
試してみたいと思います。
0707nobodyさん2010/06/28(月) 20:59:53ID:???
標準関数が例外投げたら逆にうざいっていうか、ありえん
0708nobodyさん2010/06/28(月) 21:22:59ID:???
>>707
http://www.cocoaliz.com/php/index/14/
0709nobodyさん2010/06/28(月) 21:24:49ID:???
Mon,28 Jun 2010 21:24:24 +0900
こんな感じの日時をunixtimeに変換する関数みたいなのありますか?
0710nobodyさん2010/06/28(月) 21:32:23ID:???
>>708
ななななになに?
07117092010/06/28(月) 21:42:50ID:DMKCG0er
id出し忘れてました。すいません
0712nobodyさん2010/06/28(月) 23:37:43ID:???
>>706
703だけどもしくはset_error_handlerでPHPエラー時に例外投げるようにするという手もある
>>711
みんなには内緒だよ つstrtotime
0713nobodyさん2010/06/29(火) 00:12:53ID:???
>>710
>標準関数が例外投げたら逆にうざいっていうか
標準関数が例外を吐く例
0714nobodyさん2010/06/29(火) 00:50:43ID:???
>>706
is_arrayでチェックする。そういうデータが来る可能性は予期できるはず。
0715nobodyさん2010/06/29(火) 00:56:28ID:???
>>713
>>708は標準関数が例外を吐く例には見えないんだが・・・?

>>706
第二引数に配列でない値、それは予期し得ないデータとは言えませんw
is_array使えばいいだけだろwww馬鹿なの?wwww死ぬの?wwwwww
0716nobodyさん2010/06/29(火) 01:01:32ID:???
>>707
ifとか減らせるからコードの見通しがよくなるんだけどな
0717nobodyさん2010/06/29(火) 02:53:00ID:???
>>713
吐いてないですし、投げてもいません。
0718nobodyさん2010/06/29(火) 07:50:59ID:???
警告を出すことはあるけど例外を出す関数は標準関数には無い
0719nobodyさん2010/06/29(火) 07:53:01ID:???
つSPL
0720nobodyさん2010/06/29(火) 07:55:11ID:???
クラスは例外投げるよw
0721nobodyさん2010/06/29(火) 12:00:35ID:???
try〜catchで囲んでおけば
何かあったらcatchでつかんでくれるって方が楽だと思うんだけどな・・
PHPにはterminate()も無いんだよね?
0722nobodyさん2010/06/29(火) 12:56:17ID:???
1.phpで自分自身のファイルのエンコーディングって取得できますか?
2.sambaのunix charsetのようなファイル名の文字コード等は取得できますか?

$_SERVERにはないようですし。。。
getlocaleは地域の取得で違いましたし。。

なぜ必要か、
1.は便利だから。
2.はファイルアップロード機能の汎用性のあるものを作りたいからです。
  ファイル保存時適切に日本語ファイル名のエンコーディングを指定、変換しないと化けちゃうからです。

PHP初心者です。至急宜しくお願いします。昼休みあと5分(涙
0723nobodyさん2010/06/29(火) 15:34:47ID:???
アップロードされた時のファイル名をそのまま使うつもりですか。どきどきしますね。
■ このスレッドは過去ログ倉庫に格納されています