View Issue Details

This bug affects 1 person(s).
 4
IDProjectCategoryView StatusLast Update
12161Bug reports_ Unknownpublic2018-05-23 13:19
Reporterfredcy Assigned ToLouisGac 
PrioritynoneSeverityminor 
Status closedResolutionfixed 
Product Version2.62.x 
Fixed in Version3.7.x 
Summary12161: upgrading to 2.62.2 tries to touch files in templates folder, which are not writable
Description

With the 'debug' variable set to 2 in config.php, when I upgrade from version 2.57.0 to 2.62.2 I get a "PHP warning" page reporting the error "touch(): Utime failed: Permission denied". See attachment. The stack trace shows that the code was trying to touch files in the templates directory. Per standard installation instructions, that templates directory and contents are not writable by the web server and so the touch fails.

Steps To Reproduce

Set up limesurvey running 2.57.0 (or similar, I suppose).

In config.php, set 'debug' variable to 2.

Upgrade the limesurvey code to version 2.62.2.

Visit the admin pages in the browser.

Additional Information

Per https://manual.limesurvey.org/Installation#Set_Directory_permissions, the templates directory is not one of the special directories that needs to be writable by the web server.

TagsNo tags attached.
Attached Files
PHP warning.html (27,479 bytes)   
<!DOCTYPE html PUBLIC
	"-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PHP warning</title>

<style type="text/css">
/*<![CDATA[*/
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
body{line-height:1;}
ol,ul{list-style:none;}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:none;}
:focus{outline:0;}
ins{text-decoration:none;}
del{text-decoration:line-through;}
table{border-collapse:collapse;border-spacing:0;}

body {
	font: normal 9pt "Verdana";
	color: #000;
	background: #fff;
}

h1 {
	font: normal 18pt "Verdana";
	color: #f00;
	margin-bottom: .5em;
}

h2 {
	font: normal 14pt "Verdana";
	color: #800000;
	margin-bottom: .5em;
}

h3 {
	font: bold 11pt "Verdana";
}

pre {
	font: normal 11pt Menlo, Consolas, "Lucida Console", Monospace;
}

pre span.error {
	display: block;
	background: #fce3e3;
}

pre span.ln {
	color: #999;
	padding-right: 0.5em;
	border-right: 1px solid #ccc;
}

pre span.error-ln {
	font-weight: bold;
}

.container {
	margin: 1em 4em;
}

.version {
	color: gray;
	font-size: 8pt;
	border-top: 1px solid #aaa;
	padding-top: 1em;
	margin-bottom: 1em;
}

.message {
	color: #000;
	padding: 1em;
	font-size: 11pt;
	background: #f3f3f3;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	margin-bottom: 1em;
	line-height: 160%;
}

.source {
	margin-bottom: 1em;
}

.code pre {
	background-color: #ffe;
	margin: 0.5em 0;
	padding: 0.5em;
	line-height: 125%;
	border: 1px solid #eee;
}

.source .file {
	margin-bottom: 1em;
	font-weight: bold;
}

.traces {
	margin: 2em 0;
}

.trace {
	margin: 0.5em 0;
	padding: 0.5em;
}

.trace.app {
	border: 1px dashed #c00;
}

.trace .number {
	text-align: right;
	width: 2em;
	padding: 0.5em;
}

.trace .content {
	padding: 0.5em;
}

.trace .plus,
.trace .minus {
	display:inline;
	vertical-align:middle;
	text-align:center;
	border:1px solid #000;
	color:#000;
	font-size:10px;
	line-height:10px;
	margin:0;
	padding:0 1px;
	width:10px;
	height:10px;
}

.trace.collapsed .minus,
.trace.expanded .plus,
.trace.collapsed pre {
	display: none;
}

.trace-file {
	cursor: pointer;
	padding: 0.2em;
}

.trace-file:hover {
	background: #f0ffff;
}
/*]]>*/
</style>
</head>

<body>
<div class="container">
	<h1>PHP warning</h1>

	<p class="message">
		touch(): Utime failed: Permission denied	</p>

	<div class="source">
		<p class="file">/srv/www/survey/survey1/application/models/Template.php(322)</p>
		<div class="code"><pre><span class="ln">310</span>      * Touch each directory in standard template directory to force assset manager to republish them
<span class="ln">311</span>      */
<span class="ln">312</span>     public static function forceAssets()
<span class="ln">313</span>     {
<span class="ln">314</span>         // Don&#039;t touch symlinked assets because it won&#039;t work
<span class="ln">315</span>         if (App()-&gt;getAssetManager()-&gt;linkAssets) return;
<span class="ln">316</span>         $standardTemplatesPath = Yii::app()-&gt;getConfig(&quot;standardtemplaterootdir&quot;).DIRECTORY_SEPARATOR;
<span class="ln">317</span>         $Resource = opendir($standardTemplatesPath);
<span class="ln">318</span>         while ($Item = readdir($Resource))
<span class="ln">319</span>         {
<span class="ln">320</span>             if (is_dir($standardTemplatesPath . $Item) &amp;&amp; $Item != &quot;.&quot; &amp;&amp; $Item != &quot;..&quot;)
<span class="ln">321</span>             {
<span class="error"><span class="ln error-ln">322</span>                 touch($standardTemplatesPath . $Item);
</span><span class="ln">323</span>             }
<span class="ln">324</span>         }
<span class="ln">325</span>     }
<span class="ln">326</span> }
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tr class="trace app expanded">
			<td class="number">
				#0			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/models/Template.php(322): <strong>touch</strong>(&quot;/srv/www/survey/survey1/templates/ubuntu_orange&quot;)				</div>

				<div class="code"><pre><span class="ln">317</span>         $Resource = opendir($standardTemplatesPath);
<span class="ln">318</span>         while ($Item = readdir($Resource))
<span class="ln">319</span>         {
<span class="ln">320</span>             if (is_dir($standardTemplatesPath . $Item) &amp;&amp; $Item != &quot;.&quot; &amp;&amp; $Item != &quot;..&quot;)
<span class="ln">321</span>             {
<span class="error"><span class="ln error-ln">322</span>                 touch($standardTemplatesPath . $Item);
</span><span class="ln">323</span>             }
<span class="ln">324</span>         }
<span class="ln">325</span>     }
<span class="ln">326</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#1			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/models/UpdateForm.php(377): <strong>Template</strong>::<strong>forceAssets</strong>()				</div>

				<div class="code"><pre><span class="ln">372</span>     {
<span class="ln">373</span>         // Don&#039;t touch symlinked assets because it won&#039;t work
<span class="ln">374</span>         if (App()-&gt;getAssetManager()-&gt;linkAssets) return;
<span class="ln">375</span> 
<span class="ln">376</span>         // Republish the assets
<span class="error"><span class="ln error-ln">377</span>         Template::model()-&gt;forceAssets();
</span><span class="ln">378</span>         AdminTheme::forceAssets();
<span class="ln">379</span> 
<span class="ln">380</span>         // Delete all the content in the asset directory, but not the directory itself nor the index.html file at its root ^^
<span class="ln">381</span>         $sAssetsDir = Yii::app()-&gt;getConfig(&#039;tempdir&#039;) . &#039;/assets/&#039;;
<span class="ln">382</span>         $dir = dir($sAssetsDir);
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#2			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/models/UpdateForm.php(589): <strong>UpdateForm</strong>-><strong>republishAssets</strong>()				</div>

				<div class="code"><pre><span class="ln">584</span>         $iAssetVersionNumber  = Yii::app()-&gt;getConfig(&#039;assetsversionnumber&#039;);        // From version.php
<span class="ln">585</span>         $iCurrentAssetVersion = GetGlobalSetting(&#039;AssetsVersion&#039;);                       // From setting_global table
<span class="ln">586</span> 
<span class="ln">587</span>         if ( $iAssetVersionNumber != $iCurrentAssetVersion )
<span class="ln">588</span>         {
<span class="error"><span class="ln error-ln">589</span>             self::republishAssets();
</span><span class="ln">590</span>             setGlobalSetting(&#039;AssetsVersion&#039;,$iAssetVersionNumber);
<span class="ln">591</span>             App()-&gt;getController()-&gt;redirect(array(&quot;admin/&quot;));
<span class="ln">592</span>         }
<span class="ln">593</span>         return false;
<span class="ln">594</span>     }
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/models/UpdateForm.php(607): <strong>UpdateForm</strong>-><strong>checkAssets</strong>()				</div>

				<div class="code"><pre><span class="ln">602</span>     * @access protected
<span class="ln">603</span>     * @return mixed
<span class="ln">604</span>     */
<span class="ln">605</span>     public function getUpdateNotification()
<span class="ln">606</span>     {
<span class="error"><span class="ln error-ln">607</span>         $this-&gt;checkAssets();
</span><span class="ln">608</span>         if(Yii::app()-&gt;getConfig(&#039;updatable&#039;) &amp;&amp; Permission::model()-&gt;hasGlobalPermission(&#039;superadmin&#039;) )
<span class="ln">609</span>         {
<span class="ln">610</span>             $today = new DateTime(&quot;now&quot;);
<span class="ln">611</span>             $next_update_check = Yii::app()-&gt;session[&#039;next_update_check&#039;];
<span class="ln">612</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/base/CComponent.php(111): <strong>UpdateForm</strong>-><strong>getUpdateNotification</strong>()				</div>

				<div class="code"><pre><span class="ln">106</span>      */
<span class="ln">107</span>     public function __get($name)
<span class="ln">108</span>     {
<span class="ln">109</span>         $getter=&#039;get&#039;.$name;
<span class="ln">110</span>         if(method_exists($this,$getter))
<span class="error"><span class="ln error-ln">111</span>             return $this-&gt;$getter();
</span><span class="ln">112</span>         elseif(strncasecmp($name,&#039;on&#039;,2)===0 &amp;&amp; method_exists($this,$name))
<span class="ln">113</span>         {
<span class="ln">114</span>             // duplicating getEventHandlers() here for performance
<span class="ln">115</span>             $name=strtolower($name);
<span class="ln">116</span>             if(!isset($this-&gt;_e[$name]))
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#5			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/core/Survey_Common_Action.php(541): <strong>CComponent</strong>-><strong>__get</strong>(&quot;updateNotification&quot;)				</div>

				<div class="code"><pre><span class="ln">536</span> 
<span class="ln">537</span>             $aData[&#039;dataForConfigMenu&#039;][&#039;activetokens&#039;] = $activetokens;
<span class="ln">538</span>             $aData[&#039;sitename&#039;] = Yii::app()-&gt;getConfig(&quot;sitename&quot;);
<span class="ln">539</span> 
<span class="ln">540</span>             $updateModel = new UpdateForm();
<span class="error"><span class="ln error-ln">541</span>             $updateNotification = $updateModel-&gt;updateNotification;
</span><span class="ln">542</span>             $aData[&#039;showupdate&#039;] = Yii::app()-&gt;getConfig(&#039;updatable&#039;) &amp;&amp; $updateNotification-&gt;result &amp;&amp; ! $updateNotification-&gt;unstable_update ;
<span class="ln">543</span> 
<span class="ln">544</span>             // Fetch extra menus from plugins, e.g. last visited surveys
<span class="ln">545</span>             $aData[&#039;extraMenus&#039;] = $this-&gt;fetchExtraMenus($aData);
<span class="ln">546</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#6			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/core/Survey_Common_Action.php(247): <strong>Survey_Common_Action</strong>-><strong>_showadminmenu</strong>(array(&quot;issuperadmin&quot; =&gt; true, &quot;showLastSurvey&quot; =&gt; true, &quot;surveyTitle&quot; =&gt; &quot;Test FCY survey(ID:24887)&quot;, &quot;surveyUrl&quot; =&gt; &quot;/index.php?r=admin/survey/sa/view/surveyid/24887&quot;, ...))				</div>

				<div class="code"><pre><span class="ln">242</span> 
<span class="ln">243</span> 
<span class="ln">244</span>         ob_start(); //// That was used before the MVC pattern, in procedural code. Will not be used anymore.
<span class="ln">245</span> 
<span class="ln">246</span>         $this-&gt;_showHeaders($aData); //// THe headers will be called from the layout
<span class="error"><span class="ln error-ln">247</span>         $this-&gt;_showadminmenu($aData); //// The admin menu will be called from the layout, probably as a widget for dynamic content.
</span><span class="ln">248</span>         $this-&gt;_userGroupBar($aData);
<span class="ln">249</span> 
<span class="ln">250</span>         //// Here will start the rendering from the controller of the main view.
<span class="ln">251</span>         //// For example, the Group controller will use the main.php layout, and then render the view list_group.php
<span class="ln">252</span>         //// This view will call as a subview the questiongroupbar, and then _listquestiongroup subview.
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/controllers/admin/index.php(93): <strong>Survey_Common_Action</strong>-><strong>_renderWrappedTemplate</strong>(&quot;super&quot;, &quot;welcome&quot;, array(&quot;issuperadmin&quot; =&gt; true, &quot;showLastSurvey&quot; =&gt; true, &quot;surveyTitle&quot; =&gt; &quot;Test FCY survey(ID:24887)&quot;, &quot;surveyUrl&quot; =&gt; &quot;/index.php?r=admin/survey/sa/view/surveyid/24887&quot;, ...))				</div>

				<div class="code"><pre><span class="ln">88</span>         $aData[&#039;bShowLogo&#039;] = (getGlobalSetting(&#039;show_logo&#039;)==&quot;show&quot;);
<span class="ln">89</span>         $aData[&#039;oSurveySearch&#039;] = new Survey(&#039;search&#039;);
<span class="ln">90</span>         $aData[&#039;bShowLastSurveyAndQuestion&#039;] = (getGlobalSetting(&#039;show_last_survey_and_question&#039;)==&quot;show&quot;);
<span class="ln">91</span>         $aData[&#039;iBoxesByRow&#039;]=(int) getGlobalSetting(&#039;boxes_by_row&#039;);
<span class="ln">92</span>         $aData[&#039;sBoxesOffSet&#039;]=(string) getGlobalSetting(&#039;boxes_offset&#039;);
<span class="error"><span class="ln error-ln">93</span>         $this-&gt;_renderWrappedTemplate(&#039;super&#039;, &#039;welcome&#039;, $aData);
</span><span class="ln">94</span>     }
<span class="ln">95</span> 
<span class="ln">96</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>Index</strong>-><strong>run</strong>()				</div>

							</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/actions/CAction.php(109): <strong>ReflectionMethod</strong>-><strong>invokeArgs</strong>(Index, array())				</div>

				<div class="code"><pre><span class="ln">104</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">105</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">106</span>             else
<span class="ln">107</span>                 return false;
<span class="ln">108</span>         }
<span class="error"><span class="ln error-ln">109</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">110</span>         return true;
<span class="ln">111</span>     }
<span class="ln">112</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/core/Survey_Common_Action.php(101): <strong>CAction</strong>-><strong>runWithParamsInternal</strong>(Index, ReflectionMethod, array(&quot;r&quot; =&gt; &quot;admin&quot;))				</div>

				<div class="code"><pre><span class="ln">096</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">097</span>         }
<span class="ln">098</span> 
<span class="ln">099</span>         // We&#039;re all good to go, let&#039;s execute it
<span class="ln">100</span>         // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
<span class="error"><span class="ln error-ln">101</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">102</span>     }
<span class="ln">103</span> 
<span class="ln">104</span>     /**
<span class="ln">105</span>     * Some functions have different parameters, which are just an alias of the
<span class="ln">106</span>     * usual parameters we&#039;re getting in the url. This function just populates
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#11			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/CController.php(308): <strong>Survey_Common_Action</strong>-><strong>runWithParams</strong>(array(&quot;r&quot; =&gt; &quot;admin&quot;))				</div>

				<div class="code"><pre><span class="ln">303</span>     {
<span class="ln">304</span>         $priorAction=$this-&gt;_action;
<span class="ln">305</span>         $this-&gt;_action=$action;
<span class="ln">306</span>         if($this-&gt;beforeAction($action))
<span class="ln">307</span>         {
<span class="error"><span class="ln error-ln">308</span>             if($action-&gt;runWithParams($this-&gt;getActionParams())===false)
</span><span class="ln">309</span>                 $this-&gt;invalidActionParams($action);
<span class="ln">310</span>             else
<span class="ln">311</span>                 $this-&gt;afterAction($action);
<span class="ln">312</span>         }
<span class="ln">313</span>         $this-&gt;_action=$priorAction;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#12			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/CController.php(286): <strong>CController</strong>-><strong>runAction</strong>(Index)				</div>

				<div class="code"><pre><span class="ln">281</span>      * @see runAction
<span class="ln">282</span>      */
<span class="ln">283</span>     public function runActionWithFilters($action,$filters)
<span class="ln">284</span>     {
<span class="ln">285</span>         if(empty($filters))
<span class="error"><span class="ln error-ln">286</span>             $this-&gt;runAction($action);
</span><span class="ln">287</span>         else
<span class="ln">288</span>         {
<span class="ln">289</span>             $priorAction=$this-&gt;_action;
<span class="ln">290</span>             $this-&gt;_action=$action;
<span class="ln">291</span>             CFilterChain::create($this,$action,$filters)-&gt;run();
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#13			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/CController.php(265): <strong>CController</strong>-><strong>runActionWithFilters</strong>(Index, array())				</div>

				<div class="code"><pre><span class="ln">260</span>         {
<span class="ln">261</span>             if(($parent=$this-&gt;getModule())===null)
<span class="ln">262</span>                 $parent=Yii::app();
<span class="ln">263</span>             if($parent-&gt;beforeControllerAction($this,$action))
<span class="ln">264</span>             {
<span class="error"><span class="ln error-ln">265</span>                 $this-&gt;runActionWithFilters($action,$this-&gt;filters());
</span><span class="ln">266</span>                 $parent-&gt;afterControllerAction($this,$action);
<span class="ln">267</span>             }
<span class="ln">268</span>         }
<span class="ln">269</span>         else
<span class="ln">270</span>             $this-&gt;missingAction($actionID);
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#14			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/application/controllers/AdminController.php(177): <strong>CController</strong>-><strong>run</strong>(&quot;&quot;)				</div>

				<div class="code"><pre><span class="ln">172</span>                     $this-&gt;redirect(array(&#039;/admin/authentication/sa/login&#039;));
<span class="ln">173</span>                 }
<span class="ln">174</span> 
<span class="ln">175</span>             }
<span class="ln">176</span> 
<span class="error"><span class="ln error-ln">177</span>             return parent::run($action);
</span><span class="ln">178</span>     }
<span class="ln">179</span> 
<span class="ln">180</span>     /**
<span class="ln">181</span>     * Routes all the actions to their respective places
<span class="ln">182</span>     *
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#15			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-><strong>run</strong>(&quot;&quot;)				</div>

				<div class="code"><pre><span class="ln">277</span>         {
<span class="ln">278</span>             list($controller,$actionID)=$ca;
<span class="ln">279</span>             $oldController=$this-&gt;_controller;
<span class="ln">280</span>             $this-&gt;_controller=$controller;
<span class="ln">281</span>             $controller-&gt;init();
<span class="error"><span class="ln error-ln">282</span>             $controller-&gt;run($actionID);
</span><span class="ln">283</span>             $this-&gt;_controller=$oldController;
<span class="ln">284</span>         }
<span class="ln">285</span>         else
<span class="ln">286</span>             throw new CHttpException(404,Yii::t(&#039;yii&#039;,&#039;Unable to resolve the request &quot;{route}&quot;.&#039;,
<span class="ln">287</span>                 array(&#039;{route}&#039;=&gt;$route===&#039;&#039;?$this-&gt;defaultController:$route)));
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#16			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-><strong>runController</strong>(&quot;admin&quot;)				</div>

				<div class="code"><pre><span class="ln">136</span>             foreach(array_splice($this-&gt;catchAllRequest,1) as $name=&gt;$value)
<span class="ln">137</span>                 $_GET[$name]=$value;
<span class="ln">138</span>         }
<span class="ln">139</span>         else
<span class="ln">140</span>             $route=$this-&gt;getUrlManager()-&gt;parseUrl($this-&gt;getRequest());
<span class="error"><span class="ln error-ln">141</span>         $this-&gt;runController($route);
</span><span class="ln">142</span>     }
<span class="ln">143</span> 
<span class="ln">144</span>     /**
<span class="ln">145</span>      * Registers the core application components.
<span class="ln">146</span>      * This method overrides the parent implementation by registering additional core components.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#17			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/framework/base/CApplication.php(185): <strong>CWebApplication</strong>-><strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">180</span>     public function run()
<span class="ln">181</span>     {
<span class="ln">182</span>         if($this-&gt;hasEventHandler(&#039;onBeginRequest&#039;))
<span class="ln">183</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">184</span>         register_shutdown_function(array($this,&#039;end&#039;),0,false);
<span class="error"><span class="ln error-ln">185</span>         $this-&gt;processRequest();
</span><span class="ln">186</span>         if($this-&gt;hasEventHandler(&#039;onEndRequest&#039;))
<span class="ln">187</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">188</span>     }
<span class="ln">189</span> 
<span class="ln">190</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#18			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/srv/www/survey/survey1/index.php(214): <strong>CApplication</strong>-><strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">209</span>         die (sprintf(&#039;%s should be writable by the webserver (766 or 776).&#039;, $sDefaultRuntimePath));
<span class="ln">210</span>     }
<span class="ln">211</span> }
<span class="ln">212</span> 
<span class="ln">213</span> Yii::$enableIncludePath = false;
<span class="error"><span class="ln error-ln">214</span> Yii::createApplication(&#039;LSYii_Application&#039;, $config)-&gt;run();
</span><span class="ln">215</span> 
<span class="ln">216</span> /* End of file index.php */
<span class="ln">217</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</table>
	</div>

	<div class="version">
		2017-02-28 10:37:19 Apache/2.2.15 (Red Hat) <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.17	</div>
</div>

<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");

var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
	if(traceReg.test(e[j].className)){
		e[j].onclick = function(){
			var trace = this.parentNode.parentNode;
			if(collapsedReg.test(trace.className))
				trace.className = trace.className.replace("collapsed", "expanded");
			else
				trace.className = trace.className.replace("expanded", "collapsed");
		}
	}
}
/*]]>*/
</script>

</body>
</html>
PHP warning.html (27,479 bytes)   
Bug heat4
Complete LimeSurvey version number (& build)2.62.2
I will donate to the project if issue is resolvedNo
Browser
Database type & versionMySQL 5.5.54
Server OS (if known)RHEL 6.8
Webserver software & version (if known)Apache 2.2.15
PHP Version5.4.45

Users monitoring this issue

There are no users monitoring this issue.

Activities

LouisGac

LouisGac

2017-03-07 12:05

developer   ~43186

that's the wanted behaviour. If you want to use comfortUpdate, you must change permissions before the update. Then you're free to put them back to their initial state after the update.

fredcy

fredcy

2017-03-08 03:08

reporter   ~43207

I was not using "comfort update". I updated the code via git-fetch and git-checkout.

LouisGac

LouisGac

2017-03-08 11:00

developer   ~43215

then I can close the bug report

fredcy

fredcy

2017-03-08 22:52

reporter   ~43238

I don't follow how my not using comfort update makes this a non-issue. I get fatal errors during an upgrade if the debug flag happens to be set to 2. My file permissions are set as directed by the documents.

Issue History

Date Modified Username Field Change
2017-02-28 17:44 fredcy New Issue
2017-02-28 17:44 fredcy File Added: PHP warning.html
2017-03-07 11:31 c_schmitz Assigned To => LouisGac
2017-03-07 11:31 c_schmitz Status new => assigned
2017-03-07 12:05 LouisGac Note Added: 43186
2017-03-08 03:08 fredcy Note Added: 43207
2017-03-08 11:00 LouisGac Note Added: 43215
2017-03-08 22:52 fredcy Note Added: 43238
2018-05-23 13:19 LouisGac Status assigned => closed
2018-05-23 13:19 LouisGac Resolution open => fixed
2018-05-23 13:19 LouisGac Fixed in Version => 3.7.x