トップページphp
982コメント234KB

PHP総合雑談スレ

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2008/01/14(月) 21:35:11ID:???
PHP全体の雑談のようなスレがなかったからたてた
反省はしていない
0874nobodyさん2009/06/17(水) 11:59:24ID:???
>>873
開発環境を用意できるならそこで対処だな
0875nobodyさん2009/06/17(水) 15:29:26ID:???
$_REQUESTはそもそもDIみたいなもの
0876nobodyさん2009/06/20(土) 06:10:00ID:???
>>875
どういうこと?
0877nobodyさん2009/06/20(土) 06:33:31ID:???
$_REQUESTはそもそもDIみたいなものということ
0878nobodyさん2009/06/20(土) 08:04:06ID:???
面白くない
0879nobodyさん2009/06/20(土) 08:09:53ID:???
自己紹介乙
0880nobodyさん2009/06/20(土) 17:52:24ID:75jb74IQ
ところで、関数の戻り値が配列だった時にその配列の特定要素を直接添字で指定する方法ってないの?
例えば C だと

puts((return_array())[0]);

みたいに出来るけど、HSPでこれっぽいこと試しても出来ないし情報も出てこない。
結局いちいち変数に保存しておかないとだめなのかな?
補完として指定添字の要素を返す関数みたいなもんも無さそうだし。
作るのは簡単だけどそれもモヤっとする。

誰も不便に思ってないのだろうか…?
0881nobodyさん2009/06/20(土) 18:01:51ID:???
HSP・・・?
0882nobodyさん2009/06/20(土) 18:03:42ID:???
うはー
HSPスレに毒されてた
0883nobodyさん2009/06/20(土) 19:11:19ID:???
誤爆か?
0884nobodyさん2009/06/20(土) 20:31:17ID:???
>>880
無い。
PHPは、評価→式 のモデルではなく、実行→オブジェクト のモデルだから。
0885nobodyさん2009/06/20(土) 20:46:15ID:???
配列の指定添え字の要素を返す関数がない・・・?

$array[$key];
0886nobodyさん2009/06/20(土) 20:54:21ID:???
>>884
なにそれ意味わかんない
初心者でもわかるように言うと、どういうこと?
0887nobodyさん2009/06/20(土) 20:57:27ID:zOuXJu5j
部分配列関数はあるのにね。
俺はat($array, $key)って関数を作って使ってる。

配列処理関数にarray_とか付いちゃう言語にあまり期待するなってことだな。
0888nobodyさん2009/06/20(土) 20:59:51ID:???
まさか連想配列を知らないとか言わないよね・・・
0889nobodyさん2009/06/20(土) 21:03:31ID:???
こゆこと?
zend_hash_find()じゃなくてzend_symtable_find()を使っているので整数キーも正しく扱える。

PHP_FUNCTION(array_indexof)
{
 HashTable *arr;
 char *key;
 int len;
 zval **entry;

 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "hs" &arr, &key, &len) == FAILURE) {
  return;
 }

 if (zend_symtable_find(arr, key, len+1, (void **)&entry) == SUCCESS) {
  RETURN_ZVAL(*entry, 1, 0);
 }
 RETURN_NULL();
}
0890nobodyさん2009/06/20(土) 21:17:01ID:???
キーに整数以外を使う場合を特に連想配列って呼ぶ場合もあるようだけど、phpの配列は連想配列だろ?
0891nobodyさん2009/06/20(土) 22:27:40ID:???
$ary = array(3 => 'three', 2 => 'two', 1 => 'one');
foreach($ary as $v){
var_dump($v);
}

「数字添字の連想配列」と「配列」は似ているようでちょっと違う。
「全てが連想配列」の方が内部処理的にも妥当な評価。
0892nobodyさん2009/06/20(土) 22:57:15ID:???
クォート増えると汚くなるからeval好きじゃないけど
eval("$".func_return_array()."[key]")
とかかなぁ
独自の関数用意すんのもその関数理解するためのワンステップがアレな気がするしな

値がほしいだけならlist()で受け取るって手もあるけど
0893nobodyさん2009/06/21(日) 00:07:17ID:DAfvo/AX
>eval("$".func_return_array()."[key]")
え?
0894nobodyさん2009/06/21(日) 00:10:20ID:???
( Д) ゜  ゜
0895nobodyさん2009/06/21(日) 02:28:32ID:???
すげーバカあらわるwwwこれはないですよね
はい…

思う存分叩いてください反省してきます
0896nobodyさん2009/06/21(日) 05:33:00ID:???
PHPはスライスがないからなあ。PHPが他のスクリプト言語と比べて冗長になるのは、こういう言語機能の不足から来るんだよなあ。
0897nobodyさん2009/06/21(日) 11:53:12ID:???
スライスって?
0898nobodyさん2009/06/21(日) 12:21:00ID:DAfvo/AX
($a, $b)=aplit(',', 'aaa,bbb') ;
こういう書き方がしたいわけですね。
0899nobodyさん2009/06/21(日) 13:14:59ID:???
俺もアプリットしてえ
0900nobodyさん2009/06/21(日) 13:27:56ID:???
($year,$day) = (split('-','2009-06-21'))[0,2];
0901nobodyさん2009/06/21(日) 20:55:11ID:???
ほかの言語やってて久しぶりにPHPにもどるともどかしい気持ちになるんだよなw
配列作るときのarrayとか書くのも結構めんどい
0902nobodyさん2009/06/22(月) 00:35:16ID:???
みんなのphpのバージョン教えてちょ!
0903nobodyさん2009/06/22(月) 00:49:49ID:2UIy9ouO
客先によって色々。
個人で借りてるサーバは
$php --version
PHP 5.1.6 (cli) (built: Apr 7 2009 08:00:04)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
だ。
0904nobodyさん2009/06/22(月) 03:56:57ID:???
5.2.xだお
0905nobodyさん2009/06/22(月) 09:54:55ID:???
たしかにarrayだけでqiqにしたくなる
0906nobodyさん2009/06/22(月) 10:29:15ID:???
5.2.9。
この前のメンテで上げてるなあぁ
0907nobodyさん2009/06/22(月) 15:11:18ID:???
みんなありがとう。
concreat5を試そうと思ったら、php5を要求されたから、
そろそろ移行時期かなとおもい、皆はどうなのかと思い確認させてもらいました。
0908nobodyさん2009/06/22(月) 16:15:26ID:???
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20080508/301027/
にあるコードを使って
同じ内容のメールを返させるのとファイルに保存するようなのを書き足したPHPファイルをつくったんですけど
メールが返ってくるところまではうまくいったんですけど
ファイルに保存がうまくいきません

mail($mail_address,,$diary_subject,$diary_body);
write("dat/test.dat",array($diary_subject,$diary_body));
------------------------------------------------
function write($filename, $input)
{
$input=serialize($input);
$fp=fopen($filename,"w");
flock($fp, LOCK_EX);
fputs($fp, $input);
flock($fp, LOCK_UN);
fclose($fp);
}
ちゃんとdatはchmod 733してあります。
何が原因になりそうでしょうか?
0909nobodyさん2009/06/22(月) 16:41:28ID:???
スレチでしたね サーセン
0910nobodyさん2009/06/22(月) 16:47:18ID:???
上手くいかないではなくエラー内容をチェック
0911nobodyさん2009/06/22(月) 23:26:19ID:???
相対パスを使うときは誰が何処で実行すんのかを常に意識してないとダメだぞ
0912nobodyさん2009/06/23(火) 04:22:25ID:???
はい
0913nobodyさん2009/06/30(火) 11:32:05ID:???
検索キーワードを split するスクリプト書いてるんですが、
なにかそういう系のいいサンプルって知りませんか?

全角、半角スペースをパターンに文字列を分割、
でもダブルクォーテーションでかこわれた部分は分割せず…
とかいろいろやってたら、正規表現を使った処理が意外とだらだらと長くなってしまうんです。
0914nobodyさん2009/06/30(火) 12:31:49ID:???
>>913
str_replace(' ', ' ', $input);
$keywords = str_getcsv($input, ' ');
0915nobodyさん2009/06/30(火) 12:33:32ID:???
あ、
$input = str_replace(' ', ' ', $input);
ね。

思いつきだから正しく動くかはしらん。
0916nobodyさん2009/06/30(火) 12:48:46ID:???
str_replace だと EUC-JP の全角空白の扱いおかしい時があるから
ereg_replace が安全
0917nobodyさん2009/06/30(火) 13:50:22ID:???
アドバイスありがとうございます。

$input = 'ワード1 "ワ ー ド 2" ワード3';



[0] -> ワード1
[2] -> ワ ー ド 2
[3] -> ワード3

このように分割したいのですが、preg_matchとか使ってむりやり分割する方法しか思いつかず、
どんなやりかたが王道なのかわからずに困っています。
0918nobodyさん2009/06/30(火) 14:38:55ID:???
$input = 'ワード1 "ワ ー ド 2" ワード3';
var_export(explode('"', $input));
0919nobodyさん2009/06/30(火) 14:49:40ID:???
お前は何を言ってるんだ
0920nobodyさん2009/06/30(火) 21:49:14ID:???
>>916
ereg系は5.3で非推奨?になるよ。
0921nobodyさん2009/06/30(火) 22:09:35ID:???
Perlだったら、モジュールがあるな。
http://search.cpan.org/~chorny/Text-ParseWords-3.27/ParseWords.pm
PHPで探してないんだったら、上のを参考にして自分でパーサーを書くしかないんでは。
0922nobodyさん2009/06/30(火) 22:15:51ID:ToOf0Y/8
初心者なのだがどなたか教えてくれまいか

<?php
$number = 100;
echo "<p>変数の値は $number です";
echo '<p>変数名は $number です';

?>

変数の値は や 変数名は ってやつがうまく表示してもらえないのだが
なぜですか??
0923nobodyさん2009/06/30(火) 22:19:02ID:???
「うまく表示してもらえない」っていわれても判らないんだが
どういう結果が欲しくて、実際どうなってるのか教えてくれ
0924nobodyさん2009/06/30(火) 22:24:36ID:ToOf0Y/8
えとですね、理想としては
echo "<p>変数の値は $number です";
これが『変数の値は100です』
となってほしくて
echo '<p>変数名は $number です';
こっちが『変数名は$numberです』
となってほしいのです。
でも表示結果は
?????l??@100 ??

????? $number ??
こんな感じですね
0925nobodyさん2009/06/30(火) 22:26:14ID:???
>>924
文字コードはあってる?
0926nobodyさん2009/06/30(火) 22:28:40ID:???
>>924
まず、ブラウザのエンコード(文字コード)の設定で文書のとあわせてみようね
それから、htmlで
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
みたいなの書こう
0927nobodyさん2009/06/30(火) 22:28:50ID:ToOf0Y/8
やっぱり文字コードの指定とかあるんですか><;
ブラウザがGoogleChromeなのですが
文字コードはどうやって変更したらいいでしょう?
0928nobodyさん2009/06/30(火) 22:29:20ID:???
>>924
それから
echo "<p>変数の値は $number です";

echo "<p>変数の値は {$number} です";
って書くと変数名が確実に処理される。
0929nobodyさん2009/06/30(火) 22:36:38ID:ToOf0Y/8
あっ
エンコードでSHIFT JISってやつに変えてみたら
上手く表示されました><
ありがとうございました・ω・
あとこの<p>というのはどういった意味があるのでしょうか?
0930nobodyさん2009/06/30(火) 23:30:39ID:???
>>929
段落。パラグラフのp。
0931nobodyさん2009/06/30(火) 23:30:55ID:???
>>929
ブラウザがまずWebサイトにアクセスする。
んで、どのコードで表示するかってのは、
HTMLのヘッダにあるMETAタグで読むんだ。

だから、PHPで出力するHTMLの最初の方
に、まず文字コード設定のMETAタグを書
いておこう。

通常、PHPで出力される文字コードは、PHP
のコードが書かれているファイルと同じ文字
コードになるよ。

Shift-JISでコードを書いてるなら、Shift-JIS
の文字コード宣言のMETAタグを出力するよ
うにしておいたほうがいい。じゃないと、いまの
ブラウザで普通に表示されていても、見れな
い環境も出てくると思うから。
0932nobodyさん2009/07/01(水) 00:06:52ID:???
PHPとかよりもっと基本的な部分の勉強が足りてないと見える

Webで使うつもりだろうし、まずはHTMLとかXHTML、できればStylesheetも
それに、WebクライアントやWebサーバの仕組み、文字コードの扱いなんかを
一通りは触っておかないと理解していないと
PHPを覚えてもあまり意味がない気はするぽん

階段を上るように、段階を分けて勉強していくといいと思うお
1. CGIなどが扱えないようなレンタルサーバでも公開可能な
 (静的な)ウェブサイトの作成方法を理解する
2. ローカルにウェブサーバを設置し、サーバの設定方法や
  サーバの仕組み、クライアントの仕組みなんかを理解する
3. 動的に生成されるサイトを作成してみる
みたいなカンジ
0933nobodyさん2009/07/01(水) 01:00:53ID:gWTAL2bR
皆様お返事ありがとうございます><

なるほどです。。。
自分でも少しずついろいろと調べてみてがんばって行こうと思います

まずはHTMLから始めるといった形が理想なのでしょうか?
0934nobodyさん2009/07/01(水) 01:02:04ID:???
くだすれPHPとマルチ乙
0935nobodyさん2009/07/01(水) 03:45:08ID:???
>>933
そうだね
まずは静的HTML
文字コードの話も普通はそこでぶちあたる壁
絶対リンクと相対リンクとか。

そしてスタイルシートCSSね
そんでようやくPHPだね
0936nobodyさん2009/07/01(水) 06:49:30ID:???
>>921
サンクスです
0937nobodyさん2009/07/01(水) 07:32:06ID:???
<p>がわからん、とかいうレベルなら、
まずHTMLを1ヶ月じっくりと勉強
するところからはじめるべき。
0938nobodyさん2009/07/01(水) 08:12:38ID:???
いや、一ヶ月勉強するこたないだろ。

なんでも完璧にしなきゃいけないなんてことはない。
もしそうなら、むしろ、HTMLよりは、HTTPの方が先
に勉強すべき。プロトコルを理解した上で、その中で
転送される形式の一つとしてHTMLって方が理想だよ。
0939nobodyさん2009/07/01(水) 08:27:09ID:???
・基本的なこと
 Windows/UNIXのファイルシステム。
 バイナリファイルとは何か。テキストファイルとは何か。
 テキストファイルの文字コードとは何か。
 CPUと メモリの扱う情報の単位。
 コンピュータ上で表現する色の単位。

 ※コンピュータのファイル/メモリ内で、情報を表現する際の形式について理解しよう。

・通信のこと
 TCP/IPとは何か。
 (OSI9階層なんてアホなものにハマらないこと。
 IPアドレス、ポート番号とサブネット、ルーティングとC/Sの概念だけ判ればいい)
 HTTPとは何か。
 HTTPSの理解は後でいい。POST/GET要求とそれに対する応答。
 応答ヘッダの中に、応答する内容の「形式」が含まれていることを理解する。
 あと、URLの理解。URLの実体は、極めて曖昧で、サーバーがコンテンツを識別する
 ためだけのものということを理解しよう。

・HTML
 http://gihyo.jp/book/2008/978-4-7741-3328-7
 正直、これだけ読めばいい。もっといい本もあるかもしれないけど。
 これの前半読んで、あとは実際に組むときに覚えればいい。

概念を理解してからPHPを学ぶのはそうなんだけど、実際のところこれだけ勉強すればいいんじゃない?
このほかプログラミング言語のことも理解しなきゃいけないけど、それはPHPから覚えてもいいわけだし。
これだけなら、ちゃんとした資料やちゃんと教えてくれる人に出会えれば正直、1日あれば足りる内容だと思うよ。
HTMLの文法やCSSまで、全部理解しなきゃいけないってのはどうよ。

プロだってハンドブック片手にやってるだろ。
0940nobodyさん2009/07/01(水) 10:13:41ID:???
>>920
そうなんだよね。
でも非互換になっても str_replace や preg_replace じゃ
ereg_replace のように正しく扱えないから仕方がない。
09419402009/07/01(水) 10:14:22ID:???
>>940
非互換→非推奨
0942nobodyさん2009/07/01(水) 10:15:06ID:???
うそつけ
0943nobodyさん2009/07/01(水) 10:20:07ID:???
>>940
strtolower や strtoupper にも同じ問題あるよね。
なので ereg_replace で実装している。
0944nobodyさん2009/07/01(水) 14:56:28ID:???
PHP 5.3.0 を Windows で動かすと Apache ログに

<b>Warning</b>: PHP Startup: Unable to load dynamic library 'c:\php\ext\php_pgsql.dll' - このオペレーティング システムでは %1 は実行されません。
in <b>Unknown</b> on line <b>0</b><br />

が出るんだけど、動いてる人いる?

php_curl.dll や php_mbstring.dll は読みこめているのだけど、php_pgsql.dll だけ動かん。
0945nobodyさん2009/07/01(水) 16:30:01ID:???
>>944
5.2.x の php_pgsql.dll でも動かないね
0946nobodyさん2009/07/01(水) 18:02:53ID:???
殆どのphp_pgsql.dllは壊れたまま
だから古いバージョンのライブラリから持ってこないとダメ
0947nobodyさん2009/07/01(水) 18:11:33ID:???
>>946
だよね。
5.2.9 のときも 5.2.6 のを持ってきていたので、5.2.6 のを持ってくると

<b>Warning</b>: PHP Startup: Unable to load dynamic library 'c:\php\ext\php_pgsql.dll' - 指定されたプロシージャが見つかりません。

という >>944 とは違うメッセージ。そして動かず。5.2.9 のも同様。
成功した人いないのかな。
0948nobodyさん2009/07/01(水) 18:38:51ID:???
>>947
おかしいのは5.2.6以降なので、5.2.5のだったらOK。
ちなみに自分はWampServer使ってるけど、差し替えて動いてる
0949nobodyさん2009/07/01(水) 18:46:23ID:???
致命的なバグじゃん。しかも、3世代も4世代も修正されてないって。
0950nobodyさん2009/07/01(水) 19:02:15ID:???
>>948
WampServer をダウンロードして
php_psql.dll をコピーしたのだが変わらず。
インストールに疲れたので明日再挑戦してみる。
ありがとう。
0951nobodyさん2009/07/01(水) 19:11:20ID:???
>>950
WampServerのAddonsで、5.2.5をインストール→中のphp_pgsql.dllをコピー
解凍できるなら、Addonsだけ落として中身だけもらえばいいよ
0952nobodyさん2009/07/01(水) 19:23:32ID:???
>>951
いろいろとありがとうございます。
アドオンの WampServer2-PHP525.exe をダウンロードしてコピー。
やはり動かず。。。

<br />
<b>Warning</b>: PHP Startup: Unable to load dynamic library 'c:\php\ext\php_pgsql.dll' - 指定されたプロシージャが見つかりません。
in <b>Unknown</b> on line <b>0</b><br />
0953nobodyさん2009/07/01(水) 19:26:07ID:???
>>952
右下のアイコン左クリックして、PHP→version→5.2.5で切り替え
0954nobodyさん2009/07/01(水) 21:01:49ID:gWTAL2bR
やさしいご回答のほうありがとうございました。
指摘されたことをまず勉強してからPHPの話を出させていただきますね

0955nobodyさん2009/07/01(水) 22:23:40ID:???
>>952
5.2から5.3はコアAPI関数のシグネチャとかも変わってるからdll流用は_
0956nobodyさん2009/07/02(木) 00:27:31ID:???
ぽすぐれを諦めた
0957nobodyさん2009/07/02(木) 09:24:56ID:???
>>955
ありがとうございます。
ということは Windows 上の PHP 5.3 では
今のところ PostgreSQL が使えないのですね…。
0958nobodyさん2009/07/02(木) 12:37:38ID:???
Web/DBの移植やってるんだけど、全てのphpファイルに
DBログインパスワードが直書きしてあって面倒なのなんとかしてくれ。
0959nobodyさん2009/07/02(木) 12:56:27ID:???
require_once("./db_select.inc");
0960nobodyさん2009/07/02(木) 12:58:33ID:???
PHP版のPitを作ってみた
ttp://project-p.jp/halt/anubis/blog_show/816
0961nobodyさん2009/07/02(木) 13:20:31ID:???
>>959
サンクス。

DB以外にも山ほどひどい実装があったので、
設定項目は ini に、共通初期化処理は inc に
直すことにした
0962nobodyさん2009/07/02(木) 13:44:47ID:???
初期化のほうが意味的にiniだろw
0963nobodyさん2009/07/02(木) 14:53:00ID:???
parse_ini_file のiniですw
0964nobodyさん2009/07/02(木) 14:58:58ID:???
ini_fileってinitialize fileの意だぞ
0965nobodyさん2009/07/02(木) 16:35:49ID:???
.iniはGetPrivateProfileString()で読めるフォーマットになってて欲しいと思う。
ちょっとだけね。
0966nobodyさん2009/07/02(木) 16:38:32ID:???
確かに。
PHPプラットホームの独自フォーマットなら、
INI以外にも有用なのあったろうに。ないか。

一応、極端なフォーマットにしなきゃWin32
のINIとしても使えるんじゃね?
0967nobodyさん2009/07/02(木) 16:39:14ID:???
間違えた。極端な記述にしなきゃWin32でも
使えるINIファイルになるんじゃね?
0968nobodyさん2009/07/02(木) 17:46:56ID:???
ini使うぐらいならXML使うのが今時の正常なプログラマだろうな。
0969nobodyさん2009/07/02(木) 18:07:00ID:???
トランスフォーマーはPHPで出来てるってホントですか?
0970nobodyさん2009/07/02(木) 18:08:40ID:???
日本語でおk
0971nobodyさん2009/07/02(木) 18:54:36ID:???
全部DBに突っ込んじまえ。
0972nobodyさん2009/07/02(木) 19:00:16ID:???
Win版5.3.0はPostgreSQL使えないけどな!
0973nobodyさん2009/07/02(木) 19:00:28ID:???
そのDBのパスワードはどこに書くよ
レス数が950を超えています。1000を超えると書き込みができなくなります。