【PHP】下らねぇ質問はID出して書き込みやがれ 113
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/29(火) 19:55:27.17ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 112
http://hibari.2ch.net/test/read.cgi/php/1320005469/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0302nobodyさん
2011/12/12(月) 06:44:18.12ID:???0303nobodyさん
2011/12/12(月) 07:04:30.12ID:M66zaH+00305nobodyさん
2011/12/12(月) 10:48:58.06ID:NA15lax7sqliteが使えません。これはどうしてでしょうか?
[PHP_PDO_SQLITE]
extension=php_pdo_sqlite.dll
0306305
2011/12/12(月) 11:39:02.23ID:???自分がしょぼいプログラマだったらどんな処理をするか考えて対処したら動くようになったw
0307305
2011/12/12(月) 14:10:47.40ID:???0308nobodyさん
2011/12/12(月) 17:06:36.09ID:15hpQrXGPHP5.3.8の環境で、某ライブラリを利用していたらE_DEPRECATEDという見慣れないエラーが出力されました
それで、ググったら
http://php.net/manual/ja/migration53.deprecated.php「PHP 5.3.x で推奨されない機能」というページを見つけ
そこに以下のように書いてありました
推奨されない機能
new の返り値を参照で代入すること
呼び出し時の参照渡し
ライブラリのエラー対象行には
$obj = & new $class_name($param);
と書いてあります
これがまさに推奨されない機能にあたるってことでしょうか。どちらかに該当したのでしょうか。別の問題でしょうか?
「new の返り値を参照で代入すること/呼び出し時の参照渡し」の両方とも具体的にどういうのかわかりません
具体的にどういうものなのか、すみませんが教えてください
0309nobodyさん
2011/12/12(月) 17:31:48.02ID:???これは参照で代入してる。
なので、
> $obj = & new $class_name($param);
これは、newの返り値を参照で代入してる。
0310308
2011/12/12(月) 17:34:33.61ID:???ありがとうございました
自分はこれ使ったことなかったんで今まで無縁だったんですね
効果など調べてみます、ありがとう
0311nobodyさん
2011/12/12(月) 21:05:50.74ID:M66zaH+0$url="http://park16.wakwak.com/~html-css/hp_koza/lv_3.html";
$nikki = file_get_contents($url);
preg_match('/script(.+)CSS/', $nikki, $matches);
print_r($matches);
↑だと、同一行内なので文字列を拾えるのですが、
↓のように、改行を挟むと文字列を拾えません。 改行があっても文字列が拾えるようにするにはどうすればいいでしょうか?
<?php
$url="http://park16.wakwak.com/~html-css/hp_koza/lv_3.html";
$nikki = file_get_contents($url);
preg_match('/script(.+)keywords/', $nikki, $matches);
print_r($matches);
0312nobodyさん
2011/12/12(月) 21:19:07.36ID:???0313nobodyさん
2011/12/12(月) 21:48:07.51ID:M66zaH+0おー、ありがとうございます。よくわからないけど、適当にsを付けたら改行を挟んで拾えるようになりました。
ありがとうございました。
0314nobodyさん
2011/12/12(月) 22:03:56.84ID:1pnkY9E6利用したいんですが、オススメ等ありましたら、宜しくおねがいします。
0315nobodyさん
2011/12/12(月) 22:27:59.81ID:???0316nobodyさん
2011/12/12(月) 23:11:06.87ID:v66Vpq3K$rss = simplexml_load_file( "http://blog.livedoor.jp/dqnplus/index.rdf" );
print_r( $rss->xpath( "//title" ) );
結果は空の配列になのですが、これは何を間違っていますか?
rss は
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel rdf:about="http://blog.livedoor.jp/dqnplus/">
<title>痛いニュース(ノ∀`)</title>
のようになっているので title 要素がないわけではありません。
0317nobodyさん
2011/12/12(月) 23:14:07.14ID:???0318nobodyさん
2011/12/12(月) 23:35:04.86ID:???0319nobodyさん
2011/12/12(月) 23:42:34.98ID:v66Vpq3K$rss->channel->title;
だと値を取得できます。
でもxpath にすると駄目なようです。
simplexml_load_file の第二引数が必要な気がしているのですが、何を入れればいいのか分からないです。
0320nobodyさん
2011/12/12(月) 23:51:19.30ID:???$rss->channel->title;であるならばxpath()の中に何を入れますか?
0321nobodyさん
2011/12/13(火) 00:21:07.48ID:l7M8JeoW携帯のメールを解析/添付ファイルをアップロードなどするために便利な道具として
PearのMail_mimeDecode と Qdmail_receiverがあると思いますが、どっちがおすすめですか?
お勧めする・使ってる理由があったら教えてもらえると嬉しいです
もしくは、これ以外にも便利なツールあるでしょうか?
また、上記とは別に、
携帯メールでの日記投稿/写真アップロードなどした後(postfixからのパイプ処理で)、
そのメールのデータは不要になるので、添付ファイルごと該当ファイルを削除したいです
(メールボックスの形式はMaildirです)
どうやったらこの処理は実現できるんでしょうか?
どなたか教えてください。よろしくお願いします
0322nobodyさん
2011/12/13(火) 00:47:25.54ID:p0PBCRmHそうでなかったら変換すれば良い。
0323nobodyさん
2011/12/13(火) 00:59:11.21ID:???それぞれ検索して何が出来るかもう一度読むといいかも。
受信メールの処理のサンプルとか含めて。
まず、メールをPOPかなんかでとりに行くのか、 パイプで処理するだけなのか。
そのとき、添付ファイルはどうやって取得するのか調べればすぐ分かるから。
それら全部はここには書ききれない。
0324nobodyさん
2011/12/13(火) 01:06:48.24ID:???夜中にありがとうございました
もう少し頭整理して調べてみます。それでわからなかったらまた聞かせてください
0325nobodyさん
2011/12/13(火) 01:10:31.75ID:u1iPfY/AtestHOGEメソッドが認識されなくて
LK(0 tests, 0 assersion)になる。
public function testHOGE() {
$this->assertTrue(false);
}
こんな感じだよね?
構文崩すとエラーになるのでファイル自体は認識されている模様
windows7 XAMPP2.5 PHPUnit3.5.14(xamppに最初から入っていたみたい)
0326325
2011/12/13(火) 01:11:36.30ID:u1iPfY/A0327nobodyさん
2011/12/13(火) 07:07:05.94ID:7NxNFZMgcurl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "<xml>25kb分");
これでやるとローカルでは問題ないんですが共有サーバーだと90MBとかの異常なメモリ割り当てが発生して
エラーになってしまいます。(本来は array('key' => 'value') 形式で指定するので間違った使い方なのかも)
試しに
curl_setopt($ch, CURLOPT_POSTFIELDS, array('key' => "25kb分の文字列"));
としたところ送信はできますが、相手が要求するフォーマットがxmlでkey=value形式ではないのです。
この問題はHTTP/Request.phpのaddRawPostData()を用いて送信し解決できましたが
後学のためcurlでPOSTする方法教えてもらえないでしょうか
0328nobodyさん
2011/12/13(火) 11:58:47.97ID:55RnZhjcエンコード後のパスにアクセスしてしまいます。
サーバーはいつデコード処理をしてるんでしょうか。
Windowsではurlエンコードは使えませんか。
0329nobodyさん
2011/12/13(火) 12:06:00.61ID:???0330328
2011/12/13(火) 12:13:37.74ID:55RnZhjc$path="C:/アニメ.txt"; file_put_contents($path, "0");
$path="C:/" . urlencode("アニメ.txt"); file_put_contents($path, "1");
$path=urlencode("C:/アニメ.txt"); file_put_contents($path, "2");
$path= "file:///" . urlencode("C:/アニメ.txt"); file_put_contents($path, "3");
return;
0331nobodyさん
2011/12/13(火) 12:48:55.35ID:???とかじゃだめなんか?
0332nobodyさん
2011/12/13(火) 13:29:35.03ID:???0333nobodyさん
2011/12/13(火) 13:41:25.56ID:???file_put_contents はURLエンコードされたファイル名を受け付けるとか
その先にあるファイル名を扱う関数群がURLエンコードを受け付けるとか
OSがURLエンコードを受け付けるとか、どっかに書いてあったのか?
0334nobodyさん
2011/12/13(火) 15:41:29.01ID:1bAeIiq3特定のディレクトリにユニークな名前のファイルを作りたいと思って以下のようにしました
$image_dir = "/var/www/user_file/";
$path = tempnam($image_dir, '');
が、実際には/var/www/user_file/xxxxxみたいなファイルはできず、/tmp/xxxxxというファイルが代わりにできてしまいます
tempnam()の仕様を読んだところ「対象のディレクトリがないときはシステムの一時ファイル領域にファイルを作る」と
ありますが、$image_dirのディレクトリは存在しています。
で、さらに調べたら、ls -la /tmp/xxxxx の結果が 0600 nobody:nobodyになってました
(このスクリプトは携帯メールの添付ファイル保存が目的で、postfixからのパイプ処理で動いています
また、ls -la /var/www/user_file/ の結果は 0775 apache:apacheです)
質問
・このnobodyユーザ扱いのせいで$image_dirにファイルを作れないと考えて間違いないですか?
・どうやったら、当初の目的のディレクトリ$image_dirにファイルを作れるでしょうか?
$image_dirの権限を0777 にする以外の方法でお願いします
たとえばtempnam()の実行時にapacheユーザとしてファイルを作れたら良いはずですが、
そんなこと可能でしょうか
0335nobodyさん
2011/12/13(火) 15:48:15.18ID:???0336nobodyさん
2011/12/13(火) 15:54:29.94ID:???わかってない奴が安易にやると穴が開くからお勧めできんが
あとはディレクトリのオーナーをnobodyに
0337nobodyさん
2011/12/13(火) 16:18:40.01ID:M1gnknNtすみませんが、私にはわかりませんので、ほかの人に聞いてください
0338nobodyさん
2011/12/13(火) 16:30:18.18ID:M1gnknNtcurlとPOSTでググるとよいと思います。
0339nobodyさん
2011/12/13(火) 17:30:43.08ID:???編集が楽なので1ファイルの1行ごとに内容をまとめて、そのファイルの行ごとの内容を呼び出したいです。
例
test.phpの156行目を出力する
このようなことは可能でしょうか?
0340339
2011/12/13(火) 17:31:39.90ID:TW5GIlZo0341nobodyさん
2011/12/13(火) 17:47:48.67ID:???test.phpがテキストデータなら可能
おまえはMVCを学ぶべき段階にきていると思うよ
何かフレームワークを使って作れ
0342nobodyさん
2011/12/13(火) 17:53:47.68ID:???需要ないんだろうしさ
0343339
2011/12/13(火) 17:55:16.26ID:TW5GIlZoテキストデータのtest.txtで問題ないです。
MVC、フレームワークはよくわからないので、
<?php include("test.txt"); ?>
になにか加えて簡易的にできる方法を教えてもらえれば助かります
0344nobodyさん
2011/12/13(火) 18:22:25.21ID:???改行コードで分割して、156行目のデータを出力
実行したいならeval、だけど、なんか変だと思うよそれ
0345nobodyさん
2011/12/13(火) 18:38:07.02ID:XO4P9E+zこれが正しいらしいのですが、
echo $name ."<br>";
これでもエラーになりません。
\n
これっていったい何なんでしょうか?
0346nobodyさん
2011/12/13(火) 18:38:24.87ID:???フレームワークうんぬんは無視しとけ
// メモリが問題にならないなら
$test = file('test.txt');
echo $test[155];
// 問題になるなら
$test = fopen('test.txt', 'r');
for ($i = 0; $i < 155 && fgets($test) !== false; $i++) { }
echo fgets($test);
0348nobodyさん
2011/12/13(火) 18:56:01.44ID:???0349nobodyさん
2011/12/13(火) 18:57:10.47ID:???どっちにしろおかしいけど
0352nobodyさん
2011/12/13(火) 19:08:32.89ID:???相変わらず芸がないな
0353nobodyさん
2011/12/13(火) 19:18:45.55ID:???バリデーションやら、これでよろしいですか?画面やら
DBにインサートやら正直キレそうなんですけど
これらを、簡単に制作することはできないんですか?
0354353
2011/12/13(火) 19:22:20.94ID:B3orhDGR0357nobodyさん
2011/12/13(火) 19:46:52.95ID:???0360nobodyさん
2011/12/13(火) 20:06:35.36ID:Y6ZWV3Gc0363nobodyさん
2011/12/13(火) 21:47:52.86ID:???どっちもきめえ
よって引き分けノーゲーム
0364nobodyさん
2011/12/13(火) 22:15:19.17ID:M1gnknNtそれが簡単にできるようになったらプログラマの仕事が無くなるだろ?
0365nobodyさん
2011/12/13(火) 22:39:51.64ID:???Windowsのファイル名に使えない文字。
\/:*?"<>|
Windowsのパスに使えない文字。
*?"<>|
Windowsのパスに使える記号。
\/:!#$%&'()+,-.;=@[]^_`{}~
WindowsのAscii文字のパスにヒットする正規表現。
[0-9A-Za-z\\\/:!#\$%&'\(\)\+,\-\.;=@\[\]\^_`\{\}~]+
0366nobodyさん
2011/12/13(火) 22:47:12.14ID:???ユニコード表記でかけよ
0367nobodyさん
2011/12/13(火) 22:51:27.80ID:???0368345
2011/12/13(火) 23:20:32.52ID:XO4P9E+z本当ですね、\nがあると、ソースが改行してますw
じゃ、ソースを改行するため、クライアントさまにソースを見ていただくために、\nを入れるんですか?
0370nobodyさん
2011/12/14(水) 00:12:48.87ID:hH9P1H+wクライアントだけじゃなく自分がHTMLをチェックするときも改行があったほうが見やすいだろ?
逆に敢えて改行を入れない場合もあるから好きにすればいい
0371345
2011/12/14(水) 00:33:43.94ID:QUjeWNXAなるほど、どうもです。
あと、↓の、echo $name ."<br>\n";を表示するときに、実験的に一時的に文字に赤色を付けたいのですが、
どうするの一番お手軽でしょうか?
<?php
$i = 0;
$title = "kyonun";
while( $i <= 10 ){
$count = $i;
$number = str_pad($count, 4, "0", STR_PAD_LEFT);
$name = $number . $title.".html";
echo $name ."<br>\n";
$i++;
}
?>
0372345
2011/12/14(水) 00:36:45.53ID:QUjeWNXA0373nobodyさん
2011/12/14(水) 00:53:58.00ID:???0374345
2011/12/14(水) 01:21:09.79ID:QUjeWNXAすみません、↓でやってみたけど黒いまんまです。
<?php
$i = 0; //ファイルの連番用
$title = "kyonun";
while( $i <= 10 ){
$count = $i;
$number = str_pad($count, 4, "0", STR_PAD_LEFT);
$name = $number . $title.".html";
// echo $name ."<br>\n";
$i++;
echo '<p style="red">'. $name. '</p>', PHP_EOL;
}
?>
0375nobodyさん
2011/12/14(水) 02:35:17.37ID:???print_r( explode( "\\" , "すう\\あすあxソ\\ソ\\ソソxx") );
print_r( mb_explode( "\\" , "すう\\あすあxソ\\ソ\\ソソxx") );
return;
function mb_explode( $delimiter , $string , $encode=NULL ) {
if(!is_array($delimiter)) $delimiter = array($delimiter);
if($encode===NULL) $encode = mb_detect_encoding( $string , "ASCII, UTF-8, SJIS-win, eucJP-win, JIS, UTF-16LE, UTF-16BE", TRUE);
$array = array( mb_convert_encoding( $string , "UTF-16LE", $encode ) );
foreach( $delimiter as $delim ) {
$delim = mb_convert_encoding( $delim , "UTF-16LE", $encode );
for( $n=0; $n<count($array); $n++ ) {
$subarr = explode( $delim , $array[$n] );
if(count($subarr)===1) continue;
array_splice($array, $n, 1, $subarr );
$n+=count($subarr)-1; }}
foreach( $array as &$val ) $val = mb_convert_encoding( $val , $encode, "UTF-16LE");
return $array; }
0376nobodyさん
2011/12/14(水) 02:38:30.19ID:???0377nobodyさん
2011/12/14(水) 04:29:37.65ID:hH9P1H+w<p style="red"> じゃなくて <p style="color:red"> だな。
>>373も間違ってるが、あんたもPHPだけじゃなくCSSも勉強したほうがいい。
0378345
2011/12/14(水) 05:13:46.41ID:QUjeWNXAおお、ありがとうございます。うまく行きました。
しかし、これって改行が2つも入るんですよね。1つにならないでしょうか?
あと、あと、最後のPHP_EOLって何でしょうか? デリっても表示は変わりません。
echo '<p style="color:red">'. $name. '</p>', PHP_EOL;
0379nobodyさん
2011/12/14(水) 05:40:31.71ID:???だが改行コードはOSによって違うので、
OSによって適切な改行コードにしてくれる。
ぶっちゃけ\nでいい
0381345
2011/12/14(水) 05:57:46.02ID:QUjeWNXAどうもです。
つーか、エディターはWZ6を使ってるんですけど、
文字コードをシフトJISからutf-8に変えて無意識で保存して、10分ぐらい苦労したコードを飛ばしちゃいましたw
文字コードは何がなんだかさっぱりわからんのですがどうしたらいいんですかね?
htmlファイルを自動で生成するphpを作ってうまく動いたんだけど、
ファイル名の日本語部分がめちゃくちゃ文字化けするから、
文字コードをシフトJISからutf-8に変えてみたんですよねw
そしたらソースがメチャクチャになっちゃったw
文字コードにはどういう心がけで接したらいいのかまったくわからないです〜
0382345
2011/12/14(水) 06:10:58.72ID:QUjeWNXAそれを、htmlファイルの名前にしてhtmlファイルを出力すると名前が文字化けするんですよね。
0383345
2011/12/14(水) 06:29:46.30ID:QUjeWNXA0384345
2011/12/14(水) 06:32:49.69ID:QUjeWNXA0385nobodyさん
2011/12/14(水) 07:09:32.44ID:???ちょっとは自分で調べて頑張れよ
0386nobodyさん
2011/12/14(水) 08:35:53.33ID:hH9P1H+wutf-8で保存したならutf-8で開けば問題ないはず。
ファイル名を管理するのはOSのファイルシステムなのでファイル内の文字コードとは関係ない。
OSやウェブサーバー等の環境によっては日本語ファイル名はトラブルの原因になるので
詳しいことがわからないなら日本語ファイル名は避けるのが基本。
WZの使い方は自分で調べること。
0387nobodyさん
2011/12/14(水) 10:47:14.85ID:???0388nobodyさん
2011/12/14(水) 12:26:31.39ID:???0389nobodyさん
2011/12/14(水) 17:00:13.28ID:36qjf2FUif ($result = $mysqli->query("SELECT * FROM tbUser WHERE seq = ".$_SESSION['seq'])) {
if ($result->num_rows > 0) {
$row = $result->fetch_array(MYSQLI_ASSOC);
$result->close();
$decoded = json_decode($row['profile']);
$smarty->assign('gender', $decoded->gender);
$smarty->assign('locale', $decoded->locale);
$smarty->assign('img', $decoded->img);
$smarty->assign('bio', $decoded->bio);
こんな感じの書き方で(途中ですが)apachiのエラーログに下のようなエラーが出ます
Undefined property: stdClass::$gender
どのように修正したら良いのでしょうか?
よろしくお願いします。
0390nobodyさん
2011/12/14(水) 17:04:24.51ID:???0392nobodyさん
2011/12/14(水) 17:48:19.02ID:???if(property_exists('decoded','gender')){
$smarty->assign('gender', $decoded->gender);
}
issetと同じように上のようにしたらその部分を読まなくなってしましました。
property_existsの引数の書き方が悪いのでしょうか?
0393nobodyさん
2011/12/14(水) 17:51:53.33ID:???>>1
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
0394389
2011/12/14(水) 18:10:43.40ID:36qjf2FU392は自分です。よろしくお願いします。
0395345
2011/12/14(水) 18:55:32.05ID:QUjeWNXA<?php
$name = "2ちゃんねらー.html"; // ファイル名を作る
echo '<p style="color:green">'. $name. '</p>', PHP_EOL; // ファイル名表示
$fp = fopen($name,"a"); // ファイルを作る。
fclose ($fp); // ソケットを閉じる
?>
を実行すると、
鐚???<????????????.html、が表示され、
・偵■繧・s縺ュ繧峨・.html、というファイルが生成されます。
日本語でも文字化けさせないソースを作るにはどうしたらいいのでしょうか?
よろしくお願いします。
環境は、winXP、IE8.06001、PHP Version 5.3.8です。
0396345
2011/12/14(水) 18:59:13.15ID:QUjeWNXAMySQL
サーバのバージョン: 5.5.16
Web サーバ
Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
phpMyAdmin
バージョン情報: 3.4.5
です。
0397345
2011/12/14(水) 19:05:18.41ID:QUjeWNXAありがとうございます。
あと、
info.phpに
mbstring
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
とあるのですが、これと文字化けは関係ありますか?
0398nobodyさん
2011/12/14(水) 19:08:52.76ID:???mb_convert_encoding
0399nobodyさん
2011/12/14(水) 19:29:07.35ID:???使わない方がいいんだが。
0400345
2011/12/14(水) 19:59:10.69ID:QUjeWNXAレスありがとうございます。
つか、どうもIE8のソースの文字コードはECUです。
で、ECUの文字列をコピペして、UTF-8のファイルに貼り付けると、どうなっちゃうんですかね?w
0401345
2011/12/14(水) 20:02:35.46ID:QUjeWNXA表示も、ファイルも日本語で作れました。
■ このスレッドは過去ログ倉庫に格納されています